Men-deploy container dalam arsitektur Arm dapat menghemat biaya penyebaran. Namun, Anda mungkin perlu membangun image berbeda dan menetapkan tag berbeda untuk arsitektur x86 dan Arm, yang meningkatkan biaya pemeliharaan. Untuk mengatasi hal ini, gunakan perintah docker buildx untuk membangun image multi-arsitektur dan perintah docker manifest untuk mengelola image multi-arsitektur menggunakan satu tag.
Prasyarat
Instance Container Registry Enterprise Edition telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance Container Registry Enterprise Edition.
Klien Docker telah diinstal pada perangkat lokal. Untuk informasi lebih lanjut, lihat Instal Docker.
Bangun image multi-arsitektur dari Dockerfile
Dalam contoh ini, digunakan proyek Java Maven. Buat Dockerfile dalam proyek Java Maven dan tambahkan konten berikut ke dalamnya:
#Tahap pertama: lingkungan build lengkap FROM maven:3.5.0-jdk-8-alpine AS builder # tambahkan pom.xml dan kode sumber ADD ./pom.xml pom.xml ADD ./src src/ # kemas jar RUN mvn clean package # Tahap kedua: lingkungan runtime minimal From openjdk:8-jre-alpine # salin jar dari tahap pertama COPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jar EXPOSE 8080 CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"]Buka terminal lokal di direktori tempat proyek Java Maven berada dan jalankan perintah berikut:
Nonaktifkan opsi Provenance attestations dari docker buildx dengan menjalankan perintah berikut:
export BUILDX_NO_DEFAULT_ATTESTATIONS=1Jalankan perintah berikut untuk membangun image multi-arsitektur:
docker buildx build . -t acr-test-registry.cn-hangzhou.cr.aliyuncs.com/test/test:multi --platform linux/amd64,linux/arm64 --pushSetelah menjalankan perintah tersebut, image container untuk arsitektur Amd64 dan Arm64 akan dibangun di perangkat lokal dan didorong ke repositori image.
CatatanSebelum menjalankan perintah docker push untuk mendorong image ke repositori, pastikan Anda telah masuk ke repositori menggunakan perintah docker login. Contoh perintah docker login:
docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com.
Buat image multi-arsitektur dari image yang ada
Dalam contoh ini, diasumsikan Anda memiliki dua image single-arsitektur dan ingin membuat image multi-arsitektur berdasarkan image tersebut.
Jalankan perintah
docker taguntuk menandai ulang image uni-arsitektur, lalu dorong image tersebut ke instance Container Registry Enterprise Edition. Sebagai contoh, jika image uni-arsitektur Anda adalah image NGINX Arm64 dan image NGINX AMD64, jalankan perintah berikut:docker tag nginx:arm64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker tag nginx:amd64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64Jalankan perintah
docker manifest createuntuk membuat daftar manifest dan menggabungkan image dari langkah 1 menjadi image multi-arsitektur.docker manifest create acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64Jalankan perintah
docker manifest pushuntuk mendorong daftar manifest ke instance Container Registry Enterprise Edition.docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi
Referensi
Anda juga dapat mengonfigurasi dan menjalankan tugas pembuatan image multi-arsitektur melalui konsol Container Registry. Untuk informasi lebih lanjut, lihat Bangun Image Container untuk Beberapa Arsitektur.