Mengimpor citra kontainer ke registri kontainer

Anda dapat dengan mudah mengimpor (menyalin) citra kontainer ke Azure Container Registry, tanpa menggunakan perintah Docker. Misalnya, mengimpor citra dari registri pengembangan ke registri produksi, atau menyalin citra dasar dari registri publik.

Azure Container Registry menangani sejumlah skenario umum untuk menyalin citra dan artefak lain dari registri yang ada:

  • Mengimpor citra dari registri publik

  • Impor citra atau artefak OCI termasuk bagan Helm 3 dari Azure Container Registry lainnya, di langganan atau penyewa Azure yang sama atau berbeda

  • Mengimpor dari registri kontainer pribadi non-Azure

Impor citra ke dalam Azure Container Registry memiliki manfaat berikut menggunakan perintah Docker CLI:

  • Karena lingkungan klien Anda tidak memerlukan penginstalan Docker lokal, impor citra kontainer apa pun, terlepas dari jenis OS yang didukung.

  • Saat Anda mengimpor citra multi-arsitektur (seperti citra Docker resmi), citra untuk semua arsitektur dan platform yang ditentukan dalam daftar manifes akan disalin.

  • Akses ke registri target tidak harus menggunakan titik akhir publik registri.

Penting

  • Mengimpor gambar memerlukan dukungan registri eksternal RFC 7233. Sebaiknya gunakan registri yang mendukung rentang RFC 7233 saat menggunakan perintah az acr import dengan URI registri untuk menghindari kegagalan.

Batasan

  • Jumlah maksimum manifes untuk gambar yang diimpor adalah 50.
  • Ukuran lapisan maksimum untuk gambar yang diimpor dari registri publik adalah 2 GiB.

Untuk mengimpor citra kontainer, artikel ini mengharuskan Anda menjalankan Azure CLI di Azure Cloud Shell atau secara lokal (versi 2.0.55 atau yang lebih baru direkomendasikan). Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Catatan

Jika Anda ingin mendistribusikan citra kontainer yang identik di beberapa wilayah Azure, Azure Container Registry juga mendukung replikasi geografis. Dengan mereplikasi registri secara geografis (diperlukan tingkat layanan Premium), Anda dapat melayani beberapa wilayah dengan nama citra dan tag yang identik dari satu registri.

Penting

Perubahan pada impor citra antara dua registri kontainer Azure telah diperkenalkan per Januari 2021:

  • Impor ke atau dari registri kontainer Azure yang dibatasi jaringan memerlukan registri terbatas untuk memungkinkan akses oleh layanan tepercaya untuk melewati jaringan. Secara default, pengaturan diaktifkan, memungkinkan impor. Jika pengaturan tidak diaktifkan di registri yang baru dibuat dengan titik akhir privat atau dengan aturan firewall registri, impor akan gagal.
  • Dalam registri kontainer Azure yang dibatasi jaringan yang sudah ada yang digunakan sebagai sumber impor atau target, mengaktifkan fitur keamanan jaringan ini bersifat opsional tetapi direkomendasikan.

Prasyarat

Jika Anda belum memiliki registri kontainer Azure, buat registri. Untuk langkah-langkahnya, lihat Mulai cepat: Membuat registri kontainer privat menggunakan Azure CLI.

Untuk mengimpor citra ke registri kontainer Azure, identitas Anda harus memiliki izin penulisan ke registri target (setidaknya peran Kontributor, atau peran kustom yang memungkinkan tindakan importImage). Lihat Peran dan izin Azure Container Registry.

Mengimpor dari registri publik

Penting

Untuk mengimpor dari registri publik ke registri kontainer Azure yang dibatasi jaringan memerlukan registri terbatas untuk memungkinkan akses oleh layanan tepercaya untuk melewati jaringan. Secara default, pengaturan diaktifkan, memungkinkan impor. Jika pengaturan tidak diaktifkan di registri yang baru dibuat dengan titik akhir privat atau dengan aturan firewall registri, impor akan gagal.

Mengimpor dari Docker Hub

Misalnya, gunakan perintah impor az acr untuk mengimpor citra hello-world:latest multi-arsitektur dari Docker Hub ke registri bernama myregistry. Karena hello-world merupakan citra resmi dari Docker Hub, citra ini berada di repositori library default. Sertakan nama repositori dan opsional tag dalam nilai parameter citra --source. (Anda dapat secara opsional mengidentifikasi citra dengan pencernaan manifesnya dan bukan dengan tag, yang menjamin versi citra tertentu.)

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

Anda dapat memverifikasi bahwa beberapa manifes dikaitkan dengan citra ini dengan menjalankan perintah az acr manifest list-metadata:

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

Untuk mengimpor artefak dengan digest tanpa menambahkan tag:

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

Jika Anda memiliki akun Docker Hub, kami sarankan Anda menggunakan informasi masuk saat mengimpor citra dari Docker Hub. Berikan nama pengguna dan kata sandi atau Docker Hub token akses pribadi sebagai parameter ke az acr import. Contoh berikut mengimpor citra publik dari repositori tensorflow di Docker Hub, menggunakan informasi masuk Docker Hub:

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu
  --username <Docker Hub user name>
  --password <Docker Hub token>

Mengimpor dari Microsoft Container Registry

Misalnya, mengimpor citra Windows Server Core ltsc2019 dari repositori windows di Microsoft Container Registry.

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019

Mengimpor dari registri kontainer Azure di penyewa AD yang sama

Anda dapat mengimpor gambar dari registri kontainer Azure di penyewa AD yang sama menggunakan izin Microsoft Entra terintegrasi.

  • Identitas Anda harus memiliki izin Microsoft Entra untuk membaca dari registri sumber (peran Pembaca) dan untuk mengimpor ke registri target (peran Kontributor, atau peran kustom yang memungkinkan tindakan importImage).

  • Registri dapat berada di langganan Azure yang sama atau berbeda di penyewa Direktori Aktif yang sama.

  • Akses publik ke registri sumber mungkin dinonaktifkan. Jika akses publik dinonaktifkan, tentukan registri sumber berdasarkan ID sumber daya, bukan dengan nama server login registri.

  • Jika registri sumber dan/atau registri target memiliki aturan titik akhir privat atau firewall registri yang diterapkan, pastikan bahwa registri yang dibatasi memungkinkan layanan tepercaya untuk mengakses jaringan.

Mengimpor dari registri dalam langganan yang sama

Misalnya, mengimpor citra aci-helloworld:latest dari registri sumber mysourceregistry ke myregistry dalam langganan Azure yang sama.

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld:latest \
  --image aci-helloworld:latest

Contoh berikut mengimpor citra aci-helloworld:latest ke myregistry dari registri sumber mysourceregistry di mana akses ke titik akhir publik registri dinonaktifkan. Berikan ID sumber daya registri sumber dengan parameter --registry. Perhatikan bahwa parameter --source hanya menentukan repositori dan tag sumber, bukan nama server login registri.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Contoh berikut mengimpor citra dengan manifes digest (sha-256 hash, dinyatakan sebagai sha256:... ) bukan dengan tag:

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg

Mengimpor dari registri dalam langganan berbeda

Catatan

Untuk mengimpor gambar dari satu registri ke registri lain, registri sumber dan target harus memastikan bahwa kedua wilayah terdaftar untuk Azure Container Registry (ACR) di bawah penyedia sumber daya langganan.

Dalam contoh berikut, mysourceregistry berada dalam langganan yang berbeda dari myregistry di penyewa Direktori Aktif yang sama. Berikan ID sumber daya registri sumber dengan parameter --registry. Perhatikan bahwa parameter --source hanya menentukan repositori dan tag sumber, bukan nama server login registri.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Mengimpor dari registri menggunakan informasi masuk perwakilan layanan

Untuk mengimpor dari registri yang tidak dapat Anda akses menggunakan izin Direktori Aktif terintegrasi, Anda dapat menggunakan informsi masuk perwakilan layanan (jika tersedia) ke registri sumber. Berikan appID dan kata sandi perwakilan layanan Direktori Aktif yang memiliki akses ACRPull ke registri sumber. Menggunakan perwakilan layanan berguna untuk sistem build dan sistem tanpa pengawasan lainnya yang perlu mengimpor citra ke registri Anda.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Mengimpor dari registri kontainer Azure di penyewa AD yang berbeda

Untuk mengimpor dari registri kontainer Azure di penyewa Microsoft Entra yang berbeda, tentukan registri sumber dengan nama server masuk, dan berikan kredensial yang memungkinkan akses tarik ke registri.

Impor lintas penyewa dengan nama pengguna dan kata sandi

Misalnya, gunakan token dan kata sandi tercakup repositori, atau APPID dan kata sandi perwakilan layanan Direktori Aktif yang memiliki akses ACRPull ke registri sumber.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Impor lintas penyewa dengan token akses

Untuk mengakses registri sumber menggunakan identitas di penyewa sumber yang memiliki izin registri, Anda bisa mendapatkan token akses:

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

Di penyewa target, lulus token akses sebagai kata sandi ke perintah az acr import. Registri sumber ditentukan oleh nama server login. Perhatikan bahwa tidak ada nama pengguna yang diperlukan dalam perintah ini:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --password <access-token>

Catatan

Lintas penyewa tidak berfungsi di seluruh cloud. Impor lintas penyewa melalui titik akhir privat juga tidak didukung.

Mengimpor dari registri kontainer pribadi non-Azure

Impor citra dari registri privat non-Azure dengan menentukan informasi masuk yang memungkinkan akses penarikan ke registri. Misalnya, tarik citra dari registri Docker pribadi:

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

Langkah berikutnya

Dalam artikel ini, Anda belajar tentang mengimpor citra kontainer ke registri kontainer Azure dari registri publik atau registri privat lainnya.

  • Untuk opsi impor citra tambahan, lihat referensi perintah impor az acr.