Gambar multi-arsitektur di registri kontainer Azure Anda
Artikel ini memperkenalkan gambar multi-arsitektur (multi-arch) dan bagaimana Anda dapat menggunakan fitur Azure Container Registry untuk membantu membuat, menyimpan, dan menggunakannya.
Gambar multi-lengkung adalah jenis gambar kontainer yang dapat menggabungkan varian untuk arsitektur yang berbeda, dan kadang-kadang untuk sistem operasi yang berbeda. Saat menjalankan gambar dengan dukungan multi-arsitektur, klien kontainer akan secara otomatis memilih varian gambar yang cocok dengan OS dan arsitektur Anda.
Manifes dan daftar manifes
Gambar multi-arch didasarkan pada manifes gambar dan daftar manifes.
Manifes
Setiap gambar kontainer diwakili oleh sebuah manifes. Manifes adalah file JSON yang secara unik mengidentifikasi gambar, merujuk lapisan dan ukurannya yang sesuai.
Manifes dasar untuk citra hello-world
Linux terlihat serupa dengan berikut ini:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 977,
"digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
}
]
}
Anda dapat melihat manifes di Azure Container Registry menggunakan portal Azure atau alat seperti perintah az acr manifest list-metadata di Azure CLI.
Daftar manifes
Daftar manifes untuk gambar multi-arch (lebih dikenal sebagai indeks gambar untuk gambar OCI) adalah koleksi (indeks) gambar, dan Anda membuat dengan menentukan satu atau beberapa nama gambar. Daftar ini mencakup detail tentang masing-masing gambar seperti OS dan arsitektur, ukuran, dan inti manifes yang didukung. Daftar manifes dapat digunakan dengan cara yang sama seperti nama gambar di perintah docker pull
dan docker run
.
CLI docker
mengelola manifes dan daftar manifes menggunakan perintah manifes docker.
Catatan
Saat ini, perintah dan sub perintah docker manifest
masih bersifat eksperimental. Lihat dokumentasi Docker untuk detail tentang menggunakan perintah eksperimental.
Anda dapat melihat daftar manifes menggunakan perintah docker manifest inspect
. Berikut ini adalah output untuk gambar multi-arch mcr.microsoft.com/mcr/hello-world:latest
, yang memiliki tiga manifes: dua untuk arsitektur OS Linux dan satu untuk arsitektur Windows.
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 524,
"digest": "sha256:83c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 525,
"digest": "sha256:873612c5503f3f1674f315c67089dee577d8cc6afc18565e0b4183ae355fb343",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1124,
"digest": "sha256:b791ad98d505abb8c9618868fc43c74aa94d08f1d7afe37d19647c0030905cae",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.17763.1697"
}
}
]
}
Saat daftar manifes multi-arch disimpan di Azure Container Registry, Anda juga dapat melihat daftar manifes menggunakan portal Azure atau dengan alat seperti perintah az acr manifest list-metadata.
Mengimpor gambar multi-arch
Gambar multi-arch yang ada dapat diimpor ke registri kontainer Azure menggunakan perintah impor az acr. Sintaks impor gambar sama dengan gambar arsitektur tunggal. Seperti impor gambar arsitektur tunggal, impor gambar multi-arch tidak menggunakan perintah Docker.
Untuk detailnya, lihat Mengimpor gambar kontainer ke registri kontainer.
Mendorong gambar multi-arch
Ketika Anda telah membuat alur kerja untuk membuat gambar kontainer untuk arsitektur yang berbeda, ikuti langkah-langkah ini untuk mendorong gambar multi-arch ke registri kontainer Azure Anda.
Tag dan dorong setiap gambar khusus arsitektur ke registri kontainer Anda. Contoh berikut mengasumsikan dua arsitektur Linux: arm64 dan amd64.
docker tag myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker tag myimage:amd64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:amd64
Jalankan
docker manifest create
untuk membuat daftar manifes untuk menggabungkan gambar sebelumnya ke dalam gambar multi-arch.docker manifest create myregistry.azurecr.io/multi-arch-samples/myimage:multi \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64
Dorong manifes ke registri kontainer Anda menggunakan
docker manifest push
:docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
Gunakan perintah
docker manifest inspect
untuk melihat daftar manifes. Contoh output perintah ditampilkan di bagian sebelumnya.
Setelah Anda mendorong manifes multi-arch ke registri Anda, olah gambar multi-arch dengan cara yang sama seperti yang Anda lakukan dengan gambar arsitektur tunggal. Misalnya, tarik gambar menggunakan docker pull
, dan gunakan perintah repositori az acr untuk melihat tag, manifes, dan properti gambar lainnya.
Menyusun dan mendorong gambar multi-arch
Dengan menggunakan fitur Tugas ACR, Anda dapat membuat dan mendorong gambar multi-arch ke registri kontainer Azure Anda. Misalnya, tentukan tugas multi-langkah dalam file YAML yang membangun gambar multi-arch Linux.
Contoh berikut mengasumsikan bahwa Anda memiliki Dockerfiles terpisah untuk dua arsitektur, arm64 dan amd64. Ini membangun dan mendorong gambar khusus arsitektur, kemudian membuat dan mendorong manifes multi-arch yang memiliki tag latest
:
version: v1.1.0
steps:
- build: -t {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64 -f dockerfile.arm64 .
- build: -t {{.Run.Registry}}/multi-arch-samples/myyimage:{{.Run.ID}}-arm64 -f dockerfile.amd64 .
- push:
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: >
docker manifest create
{{.Run.Registry}}/multi-arch-samples/myimage:latest
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: docker manifest push --purge {{.Run.Registry}}/multi-arch-samples/myimage:latest
- cmd: docker manifest inspect {{.Run.Registry}}/multi-arch-samples/myimage:latest
Langkah berikutnya
- Gunakan Azure Pipelines untuk membuat gambar kontainer untuk arsitektur yang berbeda.
- Pelajari tentang membangun gambar multi-platform menggunakan plug-in buildx Docker eksperimental.