Multi-stage build di Alibaba Cloud Container Registry (ACR) menghasilkan gambar aplikasi Java yang aman dan ringkas dengan waktu pembuatan lebih cepat.
Prasyarat
-
Alibaba Cloud Container Registry telah diaktifkan.
-
Docker harus diinstal. Untuk informasi selengkapnya, lihat Instal dan gunakan Docker dan Docker Compose.
-
Repositori kode sumber Java di-host di GitHub, GitLab, atau Bitbucket.
CatatanAnda dapat menyalin dan meng-host proyek Java Maven sederhana dari GitHub untuk mencoba proses ini.
Informasi latar belakang
Masalah Umum dalam Pembuatan Gambar
Membuat gambar dari Dockerfile dapat menghadirkan beberapa tantangan:
-
Dockerfile sulit ditulis
Pengembang mungkin tidak terbiasa menulis Dockerfile untuk membuat gambar aplikasi.
-
Gambar menjadi membengkak
Menyertakan kompilasi, pengujian, dan pengemasan dalam satu Dockerfile menambahkan layer gambar yang tidak perlu, sehingga menghasilkan hierarki kompleks dan ukuran file gambar besar.
-
Risiko kebocoran kode sumber
Kode sumber dapat secara tidak sengaja disertakan dalam gambar akhir, menciptakan risiko keamanan.
Manfaat Multi-stage Build
Untuk bahasa terkompilasi seperti Java, menggunakan multi-stage build dalam Dockerfile memberikan manfaat berikut:
-
Keamanan gambar meningkat
Tahap pertama menggunakan base image waktu kompilasi untuk mengunduh dependensi, mengompilasi, menguji, dan mengemas aplikasi. Tahap kedua menggunakan base image waktu eksekusi yang ringkas dan hanya menyalin artefak terkompilasi dari tahap pertama. Gambar akhir tidak berisi kode sumber.
-
Layer dan ukuran gambar dioptimalkan
Gambar akhir hanya berisi base image dan artefak terkompilasi. Hal ini menghasilkan lebih sedikit layer gambar dan ukuran file lebih kecil.
-
Kecepatan pembuatan lebih cepat
Tool pembuatan seperti Docker dan BuildKit dapat menjalankan beberapa tahap pembuatan secara paralel untuk mengurangi waktu pembuatan keseluruhan.
Langkah 1: Bind repositori kode sumber
Di Konsol Alibaba Cloud Container Registry, bind repositori kode Anda yang di-host. Contoh ini menggunakan repositori GitHub.
Login ke Konsol Container Registry.
Di bilah navigasi atas, pilih Wilayah.
Pada halaman Instances, klik instans Edisi Personal yang ingin Anda kelola.
-
Di panel navigasi kiri, pilih .
-
Pada baris GitHub, klik Bind Account di kolom Actions. Di kotak dialog yang muncul, klik Go to the source code repository to bind account untuk membuka GitHub.
-
Di halaman otorisasi, klik Authorize AliyunDeveloper. Setelah Anda kembali ke halaman Code Source, status GitHub akan ditampilkan sebagai Bound, yang menunjukkan binding berhasil.
Langkah 2: Buat repositori
Login ke Konsol Container Registry.
Di bilah navigasi atas, pilih Wilayah.
Pada halaman Instances, klik instans Edisi Personal yang ingin Anda kelola.
-
Di panel navigasi kiri, pilih , lalu klik Create Repository.
-
Konfigurasikan informasi repositori.
Parameter
Deskripsi
Contoh
Region
Wilayah tempat repositori berada.
China (Hangzhou)
Namespace
Namespace untuk repositori.
test23432
Repository Name
Masukkan nama untuk repositori.
test
Repository Type
Jenis repositori dapat berupa Public atau Private. Anda harus login untuk mendorong gambar terlepas dari jenis repositorinya. Untuk melindungi data Anda, gunakan repositori pribadi.
-
Public: Siapa pun dapat menarik gambar tanpa otentikasi.
-
Private: Diperlukan otentikasi untuk menarik gambar.
Private
Summary
Deskripsi singkat.
-
Description
Deskripsi detail. Markdown didukung.
Gunakan Dockerfile yang dibuat dan layanan pembuatan gambar ACR untuk membangun, mengemas, dan menjalankan gambar.
-
-
Klik Next dan atur sumber kode.
Parameter
Deskripsi
Code Source
Atur Code Source ke GitHub dan pilih repositori kode sumber yang telah di-bind.
Build Settings
Untuk contoh ini, pilih Automatically Build Images When Code Changes dan Build with Servers Deployed Outside Chinese Mainland.
-
Automatically Build Images When Code Changes: Secara otomatis memicu pembuatan saat kode dikomit ke branch.
-
Build with Servers Deployed Outside Chinese Mainland: Menjalankan pembuatan di pusat data di luar Tiongkok daratan dan mendorong gambar hasil ke wilayah yang ditentukan.
-
Build Without Cache: Memaksa pengambilan ulang gambar dependensi dasar untuk setiap pembuatan, yang dapat meningkatkan waktu pembuatan.
-
-
Klik Create Repository.
Setelah repositori dibuat, halaman detail repositori menampilkan informasi dasarnya.
-
Di panel navigasi kiri, klik ikon
di sebelah kiri nama repositori. Di halaman Repositories, Anda dapat melihat repositori baru Anda. Status Status bernilai Normal menunjukkan bahwa repositori berhasil dibuat.
Langkah 3: Lakukan pembuatan
-
Di panel navigasi kiri, pilih . Klik nama repositori Anda, atau klik Manage di kolom Actions repositori.
-
Di panel navigasi kiri, klik Build. Di bagian Build Rules, klik Add Build Rule.
-
Konfigurasikan aturan pembuatan.
Parameter
Deskripsi
Contoh
Type
Event yang memicu aturan pembuatan saat kode didorong ke repositori. Nilai yang valid adalah Branch dan Tag.
Branch
Branch/Tag
Branch kode yang akan dibuat.
master
Build Context Directory
Direktori tempat Dockerfile berada. Ini adalah path relatif dari root branch kode. Dalam tutorial ini, path lengkapnya adalah /Dockerfile, jadi masukkan / di sini.
/
Dockerfile Filename
Nama Dockerfile. Nilai default-nya adalah Dockerfile. Misalnya, jika path lengkapnya adalah /Dockerfile, masukkan Dockerfile.
Dockerfile
Image Version
Tag untuk versi gambar.
V1.0.0
-
Klik OK untuk kembali ke halaman Build.
-
Di bagian Build Rules, temukan aturan yang telah Anda buat dan klik Build di kolom Actions yang sesuai.
Di bagian Build Log, status pembuatan Success menunjukkan bahwa pembuatan telah selesai.
Verifikasi hasil
Lihat gambar yang dibuat
Di panel navigasi kiri, pilih Repository > Repositories. Klik nama repositori Anda, atau klik Manage di kolom Actions. Di panel navigasi kiri halaman detail repositori, klik Image Version untuk melihat gambar yang telah dibuat.
Jalankan gambar
Mulai 9 September 2024, format titik akhir registri untuk instans Edisi Personal baru akan berubah. Untuk informasi selengkapnya, lihat Catatan penggunaan untuk instans Edisi Personal baru. Pilih metode untuk mendorong dan menarik gambar berdasarkan versi instans Anda.
Instans Edisi Personal baru
-
Jalankan perintah berikut di Docker untuk login ke Alibaba Cloud Docker Registry. Dalam perintah tersebut, ganti
acr_e2******@test.aliyunid.comdengan nama Akun Alibaba Cloud Anda,cn-hangzhoudengan wilayah instans, dancrpi-xxxxdengan ID instans. Anda akan diminta memasukkan password. Untuk menemukan ID instans, login ke Konsol Alibaba Cloud Container Registry, buka Personal Edition Anda, lalu temukan Instance ID di halaman Overview pada tab Instance .docker login --username=acr_e2******@test.aliyunid.com crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com -
Jalankan perintah berikut untuk menarik gambar.
docker pull crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 -
Jalankan perintah berikut untuk melihat gambar Docker Anda.
docker images -
Jalankan perintah berikut untuk menjalankan gambar.
docker run -ti crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!
Instans Edisi Personal lama
-
Jalankan perintah berikut di Docker untuk login ke Alibaba Cloud Docker Registry. Dalam perintah tersebut, ganti
acr_e2******@test.aliyunid.comdengan nama Akun Alibaba Cloud Anda dancn-hangzhoudengan wilayah instans Anda. Anda akan diminta memasukkan password.docker login --username=acr_e2******@test.aliyunid.com registry.cn-hangzhou.cr.aliyuncs.com -
Jalankan perintah berikut untuk menarik gambar. Dalam perintah tersebut, ganti
cn-hangzhoudengan wilayah instans Anda,test23432dengan namespace Anda, dantest:V1.0.0dengan nama repositori dan tag gambar Anda.docker pull registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 -
Jalankan perintah berikut untuk melihat gambar Docker Anda.
docker images -
Jalankan perintah berikut untuk menjalankan gambar. Ganti
cn-hangzhoudengan wilayah instans Edisi Personal Anda. Gantitest23432dengan namespace aktual Anda. Gantitest:V1.0.0dengan nama repositori dan tag gambar aktual Anda.docker run -ti registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!