All Products
Search
Document Center

Container Registry:Build multi-architecture container images

Last Updated:Mar 27, 2026

Saat men-deploy kontainer pada mesin berbasis Arm, mempertahankan tag gambar terpisah untuk arsitektur x86 dan Arm meningkatkan beban pemeliharaan. Container Registry Enterprise Edition memungkinkan Anda mem-build gambar untuk beberapa arsitektur CPU dalam satu tag tunggal. Saat klien menarik (pull) gambar tersebut, registri secara otomatis menyajikan varian yang sesuai dengan arsitektur klien—tanpa memerlukan tag spesifik arsitektur.

Cara kerja

Gambar multi-arsitektur menyimpan daftar manifes bersama manifes gambar individual. Setiap entri dalam daftar manifes mengarah ke gambar yang dibuat untuk arsitektur tertentu. Saat Docker atau containerd menarik gambar berdasarkan tag, sistem membaca daftar manifes dan hanya mengambil manifes yang cocok dengan arsitektur host.

Artinya, perintah docker pull yang sama berfungsi dengan benar baik di server amd64 maupun mesin berbasis Arm.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Arsitektur yang didukung

Sistem operasiArsitekturDidukung
Linuxamd64Ya (Default)
Linuxarm64Ya
Linuxarm/v7Ya
Linuxarm/v6Ya
Windowsamd64Tidak
Gambar Windows saat ini tidak didukung. Semua arsitektur yang didukung berjalan di Linux.

Jika Anda memilih satu arsitektur, gambar akan dibuat untuk arsitektur tersebut dan didorong (push) dengan tag yang ditentukan. Jika Anda memilih beberapa arsitektur, gambar terpisah akan dibuat untuk setiap arsitektur dan didorong ke repository yang sama dengan tag yang sama.

Langkah 1: Buat proyek

Buat proyek kode sumber tempat gambar akan dibuat. File sumber Go dan Dockerfile berikut menghasilkan binary yang mencetak arsitektur mesin tempatnya berjalan—berguna untuk memverifikasi bahwa varian gambar yang tepat ditarik.

// 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"]

Dockerfile menggunakan build multi-tahap: tahap golang:alpine mengompilasi binary, dan tahap akhir alpine menghasilkan gambar minimalis.

Langkah 2: Buat repository gambar

Buat repository gambar dan bind ke proyek kode sumber. Semua build gambar yang dipicu dari proyek akan didorong ke repository ini.

  1. Masuk ke Container Registry console.

  2. Masuk ke Container Registry console.

  3. Pada bilah navigasi atas, pilih wilayah.

  4. Pada panel navigasi kiri, klik Instances.

  5. Pada halaman Instances, klik instans Edisi Perusahaan yang ingin Anda kelola.

  6. Pada panel navigasi kiri, pilih Repository > Repositories.

  7. Pada halaman Repositories, klik Create Repository.

  8. Pada langkah Repository Info, konfigurasikan Namespace, Repository Name, Repository Type, Tags, Accelerated Images, Summary, dan Description. Lalu klik Next.

  9. Pada langkah Code Source, konfigurasikan parameter berikut, lalu klik Create Repository. Opsi Build Settings:

    ParameterDeskripsi
    Code SourcePlatform hosting kode sumber yang akan di-bind ke repository.
    Build SettingsOpsi yang mengontrol cara gambar dibuat. Lihat tabel di bawah.
    Build RulesAturan yang menentukan kapan dan bagaimana gambar dibuat.
    OpsiDeskripsi
    Automatically Build Images When Code ChangesMemicu build setiap kali kode didorong ke branch yang dikonfigurasi.
    Build With Servers Deployed Outside Chinese MainlandMembuat gambar pada server di luar Tiongkok daratan, lalu mendorongnya ke wilayah yang ditentukan. Aktifkan opsi ini jika Dockerfile Anda menarik gambar dasar dari sumber di luar Tiongkok daratan dan koneksi lintas batas tidak stabil.
    Build Without CacheMenarik gambar dasar baru setiap kali build. Mengaktifkan opsi ini dapat memperlambat proses build.

Setelah repository dibuat, klik repository tersebut pada halaman Repositories. Jika Build muncul di panel navigasi kiri halaman pengelolaan repository, berarti repository telah berhasil di-bind ke repository kode sumber.

Langkah 3: Tambahkan aturan build dan pilih arsitektur

Langkah ini mengonfigurasi aturan build yang memberi tahu Container Registry branch mana yang akan dibuild, cara memberi tag gambar hasil, dan arsitektur target. Pada contoh ini, aturan build menargetkan linux/amd64 dan linux/arm64.

  1. Masuk ke Container Registry console.

  2. Masuk ke Container Registry console.

  3. Pada bilah navigasi atas, pilih wilayah.

  4. Pada panel navigasi kiri, klik Instances.

  5. Pada halaman Instances, klik instans Edisi Perusahaan yang ingin Anda kelola.

  6. Pada panel navigasi kiri, pilih Repository > Repositories.

  7. Pada halaman Repositories, temukan repository gambar, lalu klik Manage pada kolom Actions.

  8. Pada panel navigasi kiri, klik Build. Pada bagian Build Rules, klik Add Build Rule.

  9. Pada langkah Build Information, konfigurasikan parameter berikut, lalu klik Next.

    ParameterDeskripsi
    TypeJenis referensi kode sumber yang akan dipantau. Nilai yang valid: Branch dan Tag.
    Branch/TagBranch atau tag tempat build dilakukan. Ekspresi reguler didukung. Misalnya, menentukan release-(?<imageTag>\w*) secara otomatis mem-build gambar saat kode didorong ke branch seperti release-v1, menggunakan v1 sebagai tag gambar. Lihat Use regular expressions in named capturing groups.
    Catatan

    Setelah menentukan ekspresi reguler, gambar hanya dapat dibuild oleh sistem — build manual dinonaktifkan.

    Dockerfile DirectorySubdirektori dalam branch atau tag yang berisi Dockerfile. Misalnya, jika Dockerfile berada di root branch master, masukkan master/Dockerfile.
    Dockerfile FilenameNama file Dockerfile. Nilai default adalah Dockerfile.
  10. Pada langkah Tag, konfigurasikan parameter berikut, klik Save, lalu klik Next.

    Klik Add Configuration untuk menambahkan tag gambar. Maksimal tiga tag gambar didukung.
    ParameterDeskripsi
    Image TagTag untuk gambar yang dibuat, seperti latest. Jika Anda menggunakan grup penangkapan bernama (named capturing group) pada bidang Branch/Tag, Anda dapat mereferensikan nilai yang ditangkap di sini.
    Build Time(Opsional) Menambahkan timestamp dorong (UTC+8) ke tag, seperti 20201015 atau 202010151613. Jika diatur, hanya sistem yang dapat memicu build.
    Commit ID(Opsional) Menambahkan karakter dari ID commit terbaru ke tag. Secara default, enam karakter pertama digunakan. Jika diatur, hanya sistem yang dapat memicu build.
  11. Pada langkah Build Configurations, konfigurasikan parameter berikut, lalu klik Confirm.

    ParameterDeskripsi
    Build ArchitectureArsitektur tempat gambar akan dibuat. Pilih beberapa arsitektur untuk membuat gambar terpisah untuk masing-masing. Semua gambar didorong dengan tag yang sama, membentuk gambar multi-arsitektur.
    Build ParametersArgumen build waktu proses yang diteruskan ke Dockerfile. Setiap argumen merupakan pasangan kunci-nilai yang case-sensitive. Maksimal 20 parameter build didukung. Gunakan parameter build untuk memodifikasi variabel lingkungan Dockerfile tanpa mengubah Dockerfile itu sendiri.
  12. Picu aturan build menggunakan salah satu metode berikut: Pada panel navigasi kiri, klik Image Tag untuk memastikan gambar telah dibuat.

    • Pada bagian Build Rules halaman Build, temukan aturan build dan klik Build pada kolom Actions.

    • Dorong commit ke branch master repository kode sumber untuk memicu aturan secara otomatis.

    Untuk membatalkan build yang sedang berjalan, buka bagian Build Log halaman Build, temukan tugas build, lalu klik Cancel pada kolom Actions. Untuk melihat log build, klik Log pada kolom Actions untuk tugas build terkait.

Langkah 4: Verifikasi hasil

  1. Pada panel navigasi kiri halaman pengelolaan repository gambar, klik Tags. Dua gambar tercantum di bawah tag main: satu untuk Linux/AMD64 dan satu untuk Linux/ARM64.

    Multi-architecture image

  2. Verifikasi bahwa varian gambar yang tepat ditarik pada setiap arsitektur. Pada mesin Linux/AMD64:

    docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:main

    Output yang diharapkan:

    Hello, amd64!

    Pada mesin Linux/ARM64:

    docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:main

    Output yang diharapkan:

    Hello, arm!

Kedua mesin menggunakan tag gambar yang sama. Masing-masing menarik varian yang sesuai dengan arsitektur miliknya.

Lampiran: Gunakan ekspresi reguler dalam grup penangkapan bernama

Grup penangkapan bernama (named capturing group) mengekstraksi bagian dari string yang cocok dan menyimpannya di bawah kunci bernama, yang kemudian dapat Anda referensikan dalam templat.

Format grup penangkapan bernama adalah:

(?<name>Expression)

Sebagai contoh, ekspresi berikut mencocokkan release-11-2-10 dan menangkap setiap komponen versi secara terpisah:

release-(?<major>\d*)-(?<minor>\d*)-(?<version>\d*)

Konten yang cocok disimpan dalam grup bernama major, minor, dan version. Gunakan templat berikut untuk menyusun ulang menjadi 11.2.10:

${major}.${minor}.${version}

Langkah selanjutnya

Untuk mem-build dan mendorong gambar multi-arsitektur dari mesin lokal alih-alih menggunakan konsol, lihat Build and push a multi-arch image on an on-premises device to a Container Registry Enterprise Edition instance.