Menggunakan sumber daya berbasis ARM untuk men-deploy kontainer dapat secara signifikan mengurangi biaya. Namun, pendekatan ini meningkatkan beban pemeliharaan karena Anda harus membangun dan mengelola gambar terpisah untuk arsitektur yang berbeda, seperti x86 dan ARM. Fitur build multi-arsitektur di konsol ACR menyederhanakan proses ini dengan memungkinkan pengelolaan gambar untuk beberapa arsitektur dalam satu tag.
Prasyarat
-
Anda telah membuat instans Container Registry Enterprise Edition. Untuk informasi selengkapnya, lihat Create an Enterprise Edition instance.
-
Anda telah menghubungkan instans Anda ke platform hosting kode sumber. Untuk informasi selengkapnya, lihat Bind a source code hosting platform.
-
Anda telah mengonfigurasi proyek Anda untuk mendukung build pada arsitektur target.
Informasi latar belakang
-
Jika Anda hanya memilih satu arsitektur, sistem hanya akan membangun gambar untuk arsitektur tersebut dan mendorongnya dengan tag yang ditentukan.
-
Saat Anda memilih beberapa arsitektur, sistem build akan mendorong gambar untuk semua arsitektur yang dipilih ke repository image dengan tag yang sama. Klien seperti Docker dan containerd kemudian akan menarik gambar yang sesuai dengan arsitektur klien tersebut.
Tabel berikut menjelaskan arsitektur yang didukung.
|
Operating system |
Architecture |
Supported |
|
Linux |
amd64 |
Yes (Default architecture) |
|
Linux |
arm64 |
Yes |
|
Linux |
arm/v7 |
Yes |
|
Linux |
arm/v6 |
Yes |
|
Windows |
amd64 |
Not supported |
Langkah 1: Siapkan proyek Anda
Siapkan repository kode sumber untuk build gambar Anda. Sebagai contoh, Anda dapat membuat proyek dengan menggunakan file Go dan Dockerfile berikut.
// Simpan sebagai hello.go
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Printf("Hello, %s!\n", runtime.GOARCH)
}FROM golang:alpine AS builder
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o hello hello.go
FROM alpine
RUN mkdir /app
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]
Langkah 2: Buat repository image
Buat repository image dan hubungkan ke repository kode sumber. Sistem akan mendorong semua hasil build gambar yang dipicu dari repository kode sumber ke repository image ini.
Masuk ke Container Registry console.
Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Instances.
Di halaman Instances, klik instans Enterprise Edition yang ingin Anda kelola.
-
Di panel navigasi kiri halaman detail instans, pilih .
-
Di halaman Repositories, klik Create Repository.
-
Di wizard Repository Info, konfigurasikan Namespace, Repository Name, Repository Type, Image Version, Accelerated Image, Summary, dan Description. Lalu, klik Next.
-
Di wizard konfigurasi Code Source, atur Code Source, Build Settings, dan Build Rules, lalu klik Create Repository.
Parameter
Description
Code Source
Penyedia kode sumber.
Build Settings
-
Automatically Build Images When Code Changes: Memicu aturan build saat Anda melakukan commit kode ke branch tertentu.
-
Build With Servers Deployed Outside Chinese Mainland: membangun gambar di pusat data di luar Tiongkok daratan dan mendorong gambar ke wilayah yang ditentukan. Pilih opsi ini jika Dockerfile Anda perlu mengunduh file dari situs di luar Tiongkok daratan dan koneksi jaringan lintas batas tidak stabil.
-
Build Without Cache: memaksa pengambilan ulang base image pada setiap build. Memilih opsi ini dapat memperpanjang waktu build gambar.
Di halaman Repositories, klik repository image target. Jika Build muncul di panel navigasi kiri, repository image berhasil dihubungkan ke repository kode sumber.
-
Langkah 3: Buat aturan build multi-arsitektur
Untuk demonstrasi ini, kami menggunakan linux/amd64 dan linux/arm64 sebagai arsitektur build.
Masuk ke Container Registry console.
Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Instances.
Di halaman Instances, klik instans Enterprise Edition yang ingin Anda kelola.
-
Di panel navigasi kiri halaman detail instans, pilih .
-
Di halaman Repositories, temukan repository target dan klik Manage di kolom Actions.
-
Di panel navigasi kiri, klik Build. Di bagian Build Rules, klik Add Build Rule. Di langkah Build Information, atur parameter dan klik Next.
Parameter
Description
Type
Jenis kode sumber yang akan dibangun. Nilai yang valid: Branch dan Tag.
Branch/Tag
Pilih atau masukkan branch atau tag. Ekspresi reguler didukung. Misalnya, jika Anda menggunakan ekspresi reguler release-(?<imageTag>\w*), perubahan kode di branch release-v1 secara otomatis memicu build gambar dengan tag v1. Untuk informasi selengkapnya, lihat Appendix: Named capturing groups for regular expressions.
CatatanSetelah Anda mengatur ekspresi reguler, hanya build otomatis yang dipicu. Anda tidak dapat memicu build langsung secara manual.
Dockerfile Directory
Jalur ke Dockerfile, relatif terhadap root repository. Misalnya, jika Dockerfile berada di direktori root, masukkan /.
Dockerfile Filename
Nama file Dockerfile. Nilai default-nya adalah Dockerfile.
-
Di langkah Image Version, atur parameter, klik Save, lalu klik Next.
CatatanKlik Add Configuration untuk menambahkan tag gambar. Anda dapat menambahkan hingga tiga tag gambar.
Parameter
Description
Image Version
Tag gambar, misalnya latest. Ini mendukung named capturing groups untuk menggunakan konten yang ditangkap dari pengaturan Branch/Tag.
Build Time
Waktu ketika kode sumber didorong, dalam UTC+8. Format yang didukung adalah YYYYMMDD dan YYYYMMDDHHMM. Contoh: 20201015 dan 202010151613.
CatatanParameter ini opsional. Jika Anda memilih parameter ini, hanya build otomatis yang didukung dan Anda tidak dapat memicu build langsung secara manual.
Commit ID
ID commit dari push kode terbaru. Secara default, 6 karakter pertama digunakan. Anda dapat menggunakan slider untuk menyesuaikan panjangnya.
CatatanParameter ini opsional. Jika Anda memilih parameter ini, hanya build otomatis yang didukung dan Anda tidak dapat memicu build langsung secara manual.
-
Di langkah Build Configurations, atur parameter build dan klik Confirm.
Parameter
Description
Build Architecture
Pilih arsitektur build. Build untuk arsitektur yang dipilih dijalankan secara paralel, dan gambar hasilnya dikaitkan dengan satu tag gambar.
Build Parameters
Argumen waktu proses untuk build gambar, ditentukan sebagai pasangan kunci-nilai yang case-sensitive. Anda dapat mengatur hingga 20 argumen build. Argumen ini dapat memodifikasi variabel lingkungan di Dockerfile, sehingga memungkinkan satu Dockerfile menghasilkan variasi gambar yang berbeda.
-
Picu aturan build.
Anda dapat memicu aturan build dengan dua cara:
-
Di halaman Build, di bagian Build Rules, temukan aturan build target dan klik Build di kolom Actions.
-
Dorong kode ke branch utama repository kode sumber Anda.
Catatan-
Untuk membatalkan tugas build yang sedang berjalan, buka halaman Build. Di bagian Build Log, temukan tugas target dan klik Cancel di kolom Actions.
-
Untuk melihat log tugas build, buka halaman Build. Di bagian Build Log, temukan tugas target dan klik Log di kolom Actions.
Di bilah navigasi kiri, klik Image Version. Anda dapat melihat gambar yang telah dibangun, yang menunjukkan bahwa build berhasil.
-
Langkah 4: Verifikasi hasil build
-
Setelah build selesai, buka halaman pengelolaan repository target dan klik Image Version di panel navigasi kiri untuk melihat gambar yang telah dibangun untuk tag target.
Di daftar digest untuk tag gambar, Anda dapat melihat bahwa tag main mencakup gambar untuk linux/amd64 dan linux/arm64, yang mengonfirmasi keberhasilan build multi-arsitektur.
-
Verifikasi gambar pada mesin dengan arsitektur linux/amd64 dan linux/arm64.
-
Pada mesin dengan arsitektur linux/amd64, jalankan perintah berikut:
docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:mainOutput yang diharapkan:
Hello, amd64! -
Pada mesin dengan arsitektur linux/arm64, jalankan perintah berikut:
docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:mainOutput yang diharapkan:
Hello, arm64!
Hasil ini menunjukkan bahwa gambar yang dibangun dapat digunakan pada mesin dengan arsitektur yang berbeda.
-
Apendiks: Named capturing groups
Named capturing groups
Capturing group menyimpan konten yang cocok dengan subekspresi dalam ekspresi reguler. Anda dapat mereferensikan grup ini nanti, baik di dalam maupun di luar ekspresi reguler. Grup dapat diberi nomor atau diberi nama secara eksplisit. Apendiks ini memberikan pengantar singkat tentang named capturing groups.
Format umum untuk named capturing group adalah sebagai berikut:
(?<name>Expression)
Anda dapat menggunakan named capturing group untuk mengubah release-11-2-10 menjadi 11.2.10. Ekspresi reguler yang sesuai adalah sebagai berikut:
release-(?<major>\d*)-(?<minor>\d*)-(?<version>\d*)
Saat ekspresi reguler ini cocok dengan release-11-2-10, ekspresi tersebut secara otomatis menyimpan subekspresi yang cocok dalam grup bernama major, minor, dan version. Anda kemudian dapat menggunakan templat berikut untuk menghasilkan string 11.2.10:
${major}.${minor}.${version}
Dokumen terkait
Untuk mempelajari cara membangun gambar kontainer multi-arsitektur secara lokal, lihat Build and push a multi-architecture image to Container Registry from your local machine.