1 poin oleh GN⁺ 5 jam lalu | Belum ada komentar. | Bagikan ke WhatsApp
  • Container registry terlihat sederhana di permukaan, tetapi untuk men-debug masalah seperti tag yang salah, ketidakcocokan platform, layer yang hilang, atau kegagalan penghapusan nyata, kita harus memahami cara kerjanya di dalam
  • Inti registry adalah penyimpanan blob content-addressable, tempat semua layer, file konfigurasi, dan artefak disimpan dengan digest sebagai alamatnya
  • Push image berlangsung dengan urutan unggah blob lalu bungkus dengan manifest, sedangkan pull adalah struktur kebalikannya: mengambil manifest terlebih dahulu lalu mengunduh blob satu per satu
  • Penghapusan image tidak sepenuhnya selesai hanya dengan untag; kita harus lebih dulu memeriksa layer yang masih dibagikan oleh manifest lain, lalu menghapus blob secara langsung
  • Image multi-platform diimplementasikan dengan tetap mempertahankan endpoint API yang ada, hanya menambahkan satu lapisan indireksi tambahan berupa image index (manifest list)

Ringkasan Registry API

  • Sebagian besar container registry modern mengimplementasikan OCI Distribution Specification, yang mendefinisikan protokol API untuk menstandarkan distribusi konten
  • Registry API pada praktiknya ringkas dan mudah dipahami, dan cukup bisa dimanipulasi langsung hanya dengan curl

Upload dan Download Blob

  • Registry pada dasarnya adalah penyimpanan blob content-addressable, yang meng-hash file secara lokal lalu mengunggahnya dengan digest sebagai alamat
  • Metode upload paling sederhana adalah Monolithic PUT, dengan struktur dua tahap: menginisialisasi sesi lewat POST, lalu mengirim blob lewat PUT
    • Untuk file besar, metode upload chunk POST + PATCH + PUT lebih efisien, tetapi untuk blob kecil Monolithic PUT sudah memadai
  • Jika upload berhasil, respons HTTP/2 201 Created akan dikembalikan bersama header Location yang menunjuk ke lokasi blob baru
  • Download bisa langsung dilakukan lewat GET /v2/<repo>/blobs/<digest> selama digest-nya diketahui

Push Image

  • Prosedur push image: (1) upload blob layer rootfs masing-masing → (2) upload blob image configuration → (3) push file manifest yang menggabungkan semua digest ke dalam satu dokumen JSON
  • Manifest diunggah ke endpoint PUT /v2/<repo>/manifests/<tag>, dan pada saat itulah tag dibuat
  • Klien nyata (misalnya docker push) melakukan upload blob secara paralel, tetapi untuk memahami prinsipnya pemrosesan berurutan juga memungkinkan
  • Contoh susunan direktori image: config.json, layer-1.tar.gz, layer-2.tar.gz, manifest.json

Melihat Daftar Tag

  • Endpoint GET /v2/<repo>/tags/list memungkinkan kita melihat seluruh daftar tag dari repositori tertentu
  • Fitur ini tidak diekspos di CLI docker, dan hanya bisa diakses melalui alat seperti curl, crane, atau regctl
    • crane dan regctl membungkus endpoint yang sama dengan perintah ls

Pull Image

  • Prosedur pull adalah kebalikan dari push: (1) ambil manifest lewat GET /v2/<repo>/manifests/<tag> → (2) unduh semua blob menggunakan digest yang tercantum di manifest
  • Manifest modern juga dimanfaatkan sebagai penyimpanan umum yang merujuk blob untuk artefak arbitrer seperti chart Helm, SBOM, provenance attestation, bobot LLM, selain layer rootfs dan konfigurasi image

Menghapus Image

  • Penghapusan image tidak sederhana, dan menghapus tag (untag) saja tidak akan menghapus manifest itu sendiri
  • Prosedur penghapusan penuh:
    • (1) hapus tag dengan DELETE /v2/<repo>/manifests/<tag>
    • (2) ambil manifest berdasarkan digest untuk memeriksa semua blob yang dirujuk
    • (3) hapus secara selektif hanya blob yang tidak dibagikan oleh manifest lain
    • (4) hapus blob manifest dengan DELETE /v2/<repo>/blobs/<manifest-digest>
  • Karena registry adalah penyimpanan content-addressable, layer rootfs yang sama bisa dibagikan oleh banyak image, dan penghapusan dapat memengaruhi semua image yang merujuk layer tersebut
  • Sebagai alternatif, semua tag bisa dihapus lalu mengandalkan pengaturan garbage collection milik registry, tetapi di registry publik fitur ini tidak selalu aktif

Image Multi-Platform

  • Image multi-platform diimplementasikan tanpa mengubah struktur Registry API — tanpa menambah atau mengubah endpoint, API yang ada tetap digunakan
  • Cara penyusunannya:
    • Tiap varian platform tunggal (amd64, arm64, dan seterusnya) lebih dulu di-push berdasarkan digest bersama manifest terpisah
    • Setelah itu, manifest tingkat atas yang disebut image index (manifest list) di-push bersama tag
  • Saat memanggil GET /v2/<repo>/manifests/<tag>, hasilnya bisa berupa manifest platform tunggal atau image index, dan pemanggil harus membedakannya dari content type dokumen yang dikembalikan
  • Hasil akhirnya, dukungan multi-platform hanya menambahkan satu lapisan indireksi dan satu tahap upload/download dokumen index ke struktur yang sudah ada

Melindungi Registry API

  • OCI Distribution Spec tidak mendefinisikan metode autentikasi secara ketat, tetapi kebanyakan registry nyata menggunakan autentikasi HTTP Basic
  • Untuk mencegah kredensial dikirim dalam bentuk teks biasa, registry harus dijalankan di atas HTTPS

Belum ada komentar.

Belum ada komentar.