Tentang registri, repositori, dan artefak

Artikel ini memperkenalkan konsep kunci registri kontainer, repositori, dan citra kontainer dan artefak terkait.

Registry, repositories, and artifacts

Registri

Registrasi kontainer adalah layanan yang menyimpan dan mendistribusikan citra kontainer dan artefak terkait. Docker Hub adalah contoh registri kontainer publik yang berfungsi sebagai katalog umum dari citra kontainer Docker. Azure Container Registry memberi pengguna kontrol langsung atas konten kontainer mereka, dengan autentikasi terintegrasi, replikasi geografis yang mendukung distribusi dan keandalan global untuk penyebaran jaringan dekat, konfigurasi jaringan virtual dengan Private Link, penguncian tag , dan banyak fitur yang disempurnakan lainnya.

Selain citra kontainer yang kompatibel dengan Docker, Azure Container Registry mendukung berbagai artefak konten termasuk diagram Helm dan format citra Open Container Initiative (OCI).

Repositori

Repositori adalah kumpulan citra kontainer atau artefak lain dalam registri yang memiliki nama yang sama, tetapi tag yang berbeda. Misalnya, tiga citra berikut ada di repositori acr-helloworld:

  • acr-helloworld:v1
  • acr-helloworld:v1
  • acr-helloworld:v2

Nama repositori juga dapat menyertakan ruang nama. Namespace memungkinkan Anda mengidentifikasi repositori terkait dan kepemilikan artefak di organisasi Anda dengan menggunakan nama yang dipisahkan garis miring. Namun, registri mengelola semua repositori secara independen, bukan sebagai hierarki. Contohnya:

  • marketing/campaign10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campaign10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrator:20180715

Nama repositori hanya dapat menyertakan karakter alfanumerik huruf kecil, titik, tanda hubung, garis bawah, dan garis miring.

Artefak

Citra kontainer atau artefak lain dalam registri dikaitkan dengan satu atau beberapa tag, memiliki satu atau beberapa lapisan, dan diidentifikasi oleh manifes. Memahami bagaimana komponen ini berhubungan satu sama lain dapat membantu Anda mengelola registri Anda secara efektif.

Tag

Tag untuk citra atau artefak lain menentukan versinya. Artefak tunggal dalam repositori dapat diberi satu atau banyak tag, dan mungkin juga "tidak ditandai." Artinya, Anda dapat menghapus semua tag dari gambar, sementara data gambar (lapisannya) tetap berada di registri.

Repositori (atau repositori dan namespace) ditambah tag mendefinisikan nama citra. Anda dapat mendorong dan menarik citra dengan menentukan namanya dalam pengoperasian dorong atau tarik. Tag latest digunakan secara default jika Anda tidak memberikannya di perintah Docker Anda.

Cara Anda memberi tag pada citra kontainer dipandu oleh skenario Anda untuk mengembangkan atau menerapkannya. Misalnya, tag stabil direkomendasikan untuk mempertahankan citra dasar Anda, dan tag unik untuk menyebarkan citra. Untuk informasi selengkapnya, lihat Rekomendasi untuk memberi tag dan membuat versi citra kontainer.

Untuk aturan penamaan tag, lihat dokumentasi Docker.

Lapisan

Citra kontainer dan artefak terdiri dari satu atau lebih lapisan. Jenis artefak yang berbeda mendefinisikan lapisan secara berbeda. Misalnya, dalam citra kontainer Docker, setiap lapisan sesuai dengan baris di Dockerfile yang mendefinisikan citra:

Layers of a container image

Artefak dalam registri berbagi lapisan umum, meningkatkan efisiensi penyimpanan. Misalnya, beberapa citra dalam repositori yang berbeda mungkin memiliki lapisan dasar ASP.NET Core yang umum, tetapi hanya satu salinan dari lapisan tersebut yang disimpan di registri. Berbagi lapisan juga mengoptimalkan distribusi lapisan ke node, dengan beberapa artefak berbagi lapisan umum. Jika citra yang sudah ada di simpul menyertakan lapisan Inti ASP.NET sebagai dasarnya, tarikan berikutnya dari gambar berbeda yang merujuk ke lapisan yang sama tidak mentransfer lapisan ke simpul. Sebagai gantinya, ini merujuk pada lapisan yang sudah ada di node.

Untuk memberikan isolasi dan perlindungan yang aman dari potensi manipulasi lapisan, lapisan tidak dibagikan di seluruh registri.

Manifes

Setiap citra atau artefak kontainer yang didorong ke registri kontainer dikaitkan dengan manifes. Manifes, yang dihasilkan oleh registri saat konten didorong, secara unik mengidentifikasi artefak dan menentukan lapisan.

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 membuat daftar manifes untuk repositori dengan perintah Azure CLI az acr manifest list-metadata:

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

Misalnya, buat daftar manifes untuk repositori "acr-helloworld":

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2018-07-11T21:38:35.9170967Z"
  }
]

Hash manifes

Manifes diidentifikasi dengan hash SHA-256 unik, atau hash manifes. Setiap citra atau artefak - apakah diberi tag atau tidak - diidentifikasi oleh hashnya. Nilai hash bersifat unik meskipun data lapisan artefak identik dengan data artefak lain. Mekanisme inilah yang memungkinkan Anda untuk berulang kali mendorong citra yang ditandai secara identik ke registri. Misalnya, Anda dapat berulang kali mendorong myimage:latest ke registri Anda tanpa kesalahan karena setiap citra diidentifikasi oleh intisari uniknya.

Anda dapat menarik artefak dari registri dengan menentukan intisasinya dalam pengoperasian penarikan. Beberapa sistem mungkin dikonfigurasi untuk menarik demi hash karena menjamin versi citra ditarik, bahkan jika citra yang diberi tag identik didorong kemudian ke registri.

Penting

Jika Anda berulang kali mendorong artefak yang dimodifikasi dengan tag yang identik, Anda mungkin membuat "orphans"--artefak yang tidak ditandai, tetapi masih menggunakan ruang di registri Anda. Citra tanpa tag tidak diperlihatkan di Azure CLI atau di portal Azure saat Anda mencantumkan atau menampilkan citra menurut tag. Namun, lapisannya masih ada dan menghabiskan ruang di registri Anda. Menghapus citra yang tidak ditandai akan membebaskan ruang registri ketika manifes adalah satu-satunya, atau yang terakhir, yang menunjuk ke lapisan tertentu. Untuk informasi tentang mengosongkan ruang yang digunakan oleh citra yang tidak diberi tag, lihat Menghapus citra kontainer di Azure Container Registry.

Mengatasi artefak

Untuk mengatasi artefak registri untuk pengoperasian push dan pull dengan Docker atau alat klien lainnya, gabungkan nama registri yang sepenuhnya memenuhi syarat, nama repositori (termasuk jalur namespace jika berlaku), dan tag artefak atau hash manifes. Lihat bagian sebelumnya untuk penjelasan istilah-istilah ini.

Alamat berdasarkan tag: [loginServerUrl]/[repository][:tag]

Alamat berdasarkan hash: [loginServerUrl]/[repository@sha256][:digest]

Saat menggunakan Docker atau alat klien lainnya untuk menarik atau mendorong artefak ke registri kontainer Azure, gunakan URL registri yang sepenuhnya memenuhi syarat, juga disebut nama server masuk. Di cloud Azure, URL yang sepenuhnya memenuhi syarat dari registri kontainer Azure dalam format myregistry.azurecr.io (semua huruf kecil).

Catatan

  • Anda tidak dapat menentukan nomor port di URL server masuk registri, seperti myregistry.azurecr.io:443.
  • Tag latest digunakan secara default jika Anda tidak memberikan tag dalam perintah Anda.

Dorong berdasarkan tag

Contoh:

docker push myregistry.azurecr.io/samples/myimage:20210106

docker push myregistry.azurecr.io/marketing/email-sender

Tarik berdasarkan tag

Contoh:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

Tarik dengan hash manifes

Contoh:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

Langkah berikutnya

Pelajari lebih lanjut tentang penyimpanan registri dan format konten yang didukung di Azure Container Registry.

Pelajari cara mendorong dan menarik citra dari Azure Container Registry.