- Konteyner kayıt defteri dışarıdan bakıldığında basit görünür; ancak hatalı etiketler, platform uyumsuzluğu, katman eksikliği veya gerçek silme işleminin başarısız olması gibi sorunları debug etmek için iç işleyişini mutlaka anlamak gerekir
- Kayıt defterinin özü, içeriğe göre adreslenen (content-addressable) blob deposudur; tüm katmanlar, yapılandırma dosyaları ve artifact'ler digest'i adres olarak kullanarak saklanır
- İmaj push işlemi, blob'ların yüklenmesinden sonra bunların manifest ile bir araya getirilmesi sırasıyla ilerler; pull ise önce manifest'in alınması, ardından blob'ların sırayla indirilmesi şeklindeki ters yapıdır
- İmaj silme, yalnızca untag işlemiyle tamamen gerçekleşmez; başka manifest'lerde paylaşılan katmanlar önce kontrol edilmeli, ardından blob'lar da doğrudan silinmelidir
- Çok platformlu imajlar, mevcut API endpoint'lerini koruyup yalnızca image index (manifest list) adlı ek bir dolaylı katman eklenerek uygulanır
Registry API'ye genel bakış
- Modern konteyner kayıt defterlerinin çoğu OCI Distribution Specification uygular; bu spesifikasyon, içerik dağıtımını standartlaştıran bir API protokolü tanımlar
- Registry API pratikte sade ve anlaşılması kolaydır; yalnızca
curlile bile doğrudan yeterince kontrol edilebilir
Blob yükleme ve indirme
- Kayıt defteri özünde içeriğe göre adreslenen bir blob deposudur; dosya yerelde hash'lenir, ardından digest adres olarak kullanılarak yüklenir
- En basit yükleme yöntemi Monolithic PUT yaklaşımıdır;
POSTile oturum başlatılır, ardındanPUTile blob gönderilir; yani 2 aşamalı bir yapıdır- Büyük dosyalarda
POST + PATCH + PUTparça parça yükleme yöntemi daha verimlidir; ancak küçük blob'lar için Monolithic PUT yeterlidir
- Büyük dosyalarda
- Yükleme başarılı olduğunda
HTTP/2 201 Createdyanıtıyla birlikte yeni blob'un konumunu gösterenLocationheader'ı döner - İndirme ise yalnızca digest biliniyorsa
GET /v2/<repo>/blobs/<digest>ile doğrudan yapılabilir
İmaj Push
- İmaj push süreci: (1) her rootfs katmanı blob'unun yüklenmesi → (2) image configuration blob'unun yüklenmesi → (3) tüm digest'leri tek bir JSON belgesinde birleştiren manifest dosyasının push edilmesi
- Manifest,
PUT /v2/<repo>/manifests/<tag>endpoint'ine yüklenir ve etiket bu aşamada oluşturulur - Gerçek istemciler (ör.
docker push) blob yüklemelerini paralel yürütür; ancak mantığı anlamak için sıralı işleme de mümkündür - İmaj dizini örneği:
config.json,layer-1.tar.gz,layer-2.tar.gz,manifest.json
Etiket listesini görüntüleme
GET /v2/<repo>/tags/listendpoint'iyle belirli bir repository içindeki tüm etiketlerin listesi alınabilir- Bu özellik
dockerCLI'da görünmez; yalnızcacurlveyacrane,regctlgibi araçlarla erişilebilircraneveregctl, aynı endpoint'ilskomutuyla sarmalayan araçlardır
İmaj Pull
- Pull süreci push'ın tersidir: (1)
GET /v2/<repo>/manifests/<tag>ile manifest alınır → (2) manifest'te belirtilen digest'lere göre tüm blob'lar indirilir - Modern manifest'ler, rootfs katmanları ve imaj yapılandırmasının yanı sıra Helm chart'ları, SBOM, provenance attestation ve LLM ağırlıkları gibi keyfi artifact'lere blob olarak referans veren genel amaçlı bir depo olarak da kullanılır
İmaj silme
- İmaj silme basit değildir; yalnızca etiketin kaldırılması (untag), manifest'in kendisinin silindiği anlamına gelmez
- Tam silme süreci:
- (1)
DELETE /v2/<repo>/manifests/<tag>ile etiketin kaldırılması - (2) manifest'in digest ile alınarak referans verdiği tüm blob'ların kontrol edilmesi
- (3) yalnızca başka manifest'ler tarafından paylaşılmayan blob'ların seçerek silinmesi
- (4)
DELETE /v2/<repo>/blobs/<manifest-digest>ile manifest blob'unun silinmesi
- (1)
- Kayıt defteri içeriğe göre adreslenen bir depo olduğundan, aynı rootfs katmanı birden fazla imaj tarafından paylaşılabilir; bu nedenle silme işlemi o katmana referans veren tüm imajları etkileyebilir
- Alternatif olarak tüm etiketler kaldırıldıktan sonra kayıt defterinin garbage collection ayarına güvenilebilir; ancak ortak kullanılan kayıt defterlerinde bu her zaman etkin değildir
Çok platformlu imajlar
- Çok platformlu imajlar Registry API yapısı değiştirilmeden uygulanır — endpoint ekleme veya değiştirme olmadan mevcut API aynen kullanılır
- Yapılandırma şekli:
- Her tekil platform varyantı (amd64, arm64 vb.) ayrı bir manifest ile birlikte önce digest tabanlı olarak push edilir
- Ardından image index (manifest list) adı verilen üst düzey manifest, etiketle birlikte push edilir
GET /v2/<repo>/manifests/<tag>çağrısı yapıldığında tek platformlu manifest veya image index'ten biri döner; çağıran taraf bunu dönen belgenin content type'ına göre ayırt etmelidir- Sonuç olarak çok platform desteği, mevcut yapıya yalnızca bir dolaylı katman ve bir index belgesi yükleme/indirme adımı ekler
Registry API'yi koruma
- OCI Distribution Spec kimlik doğrulama yöntemini katı biçimde tanımlamaz; ancak gerçek dünyadaki kayıt defterlerinin çoğu HTTP Basic kimlik doğrulaması kullanır
- Kimlik bilgilerinin düz metin olarak iletilmesini önlemek için mutlaka HTTPS üzerinde çalıştırılmalıdır
Henüz yorum yok.