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 gambar 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.

  1. 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
    
  2. 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
    
  3. Dorong manifes ke registri kontainer Anda menggunakan docker manifest push:

    docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
    
  4. 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.