1 puan yazan GN⁺ 2024-07-13 | 1 yorum | WhatsApp'ta paylaş

S3'ü konteyner kayıt defteri olarak kullanmak

  • Son 4 aydır Outerbounds ile iş birliği içinde özel bir konteyner imaj oluşturucusu geliştiriliyordu
  • S3'ün bir konteyner kayıt defteri olarak kullanılabileceği keşfedildi
  • Bir S3 bucket'ını HTTP üzerinden açığa çıkarıp belirli bir yola imaj yüklediğinizde, imaj docker pull komutuyla çekilebiliyor

Demo

  • cowsay çalıştıran bir konteyner imajı oluşturulup S3 bucket'ına yüklendi
  • Ücretsiz egress sağlamak için R2 kullanıldı
  • R2 ve S3 API uyumlu
$ docker run --rm pub-40af5d7df1e0402d9a92b982a6599860.r2.dev/cowsay

Neden S3 kullanılsın?

  • Geleneksel olarak DockerHub, GitHub Container Registry, ECR vb. kullanılıyor
  • S3, yükleme hızında büyük bir avantaj sağlıyor
  • ECR ile S3'ün yükleme hızları karşılaştırıldığında, S3'ün en fazla 8 kat daha hızlı olduğu görüldü

S3 neden daha hızlı?

  • S3, tek bir katmanın parçalarını paralel olarak yükleyebiliyor
  • ECR, OCI Distribution Spec'e uyduğu için yüklemeleri sıralı yapmak zorunda
  • Paralel yükleme yapamayan ECR, bant genişliğini yeterince verimli kullanamıyor

S3 bir konteyner kayıt defteri değil

  • S3, teknik olarak bir konteyner kayıt defteri değil
  • docker pull komutu dosyaları HTTP istekleriyle indiriyor
  • S3 bucket'ı uygun şekilde yapılandırılırsa konteyner kayıt defteri olarak kullanılabiliyor

Dikkat edilmesi gerekenler

  • Bu yöntem oldukça deneysel
  • Mevcut konteyner kayıt defterlerinin sunduğu özellikleri sağlamıyor (ör. güvenlik taraması, erişim kontrolü vb.)
  • Daha fazla araştırma gerekiyor

PS. Balina ne olacak?

  • Bu, Docker logosuna gönderme yapan bir şaka

GN⁺ özeti

  • Bu yazı, S3'ü konteyner kayıt defteri olarak kullanma yöntemini açıklıyor
  • S3'ün hızlı yükleme hızından yararlanılabiliyor
  • Mevcut konteyner kayıt defterlerinin özelliklerini sunmadığı için dikkatli olmak gerekiyor
  • Deneysel ama ilgi çekici bir yaklaşım
  • Benzer işlevler sunan diğer projeler arasında DockerHub, GitHub Container Registry ve ECR yer alıyor

1 yorum

 
GN⁺ 2024-07-13
Hacker News görüşleri
  • OCI Distribution spesifikasyonunun statik dosyaları desteklemesinin iyi olacağı yönünde bir görüş var

    • Basit bir HTTP sunucusunun veya dosya protokolünün doğrudan kullanılabilmesini sağlar
    • Tüm meta veriler zaten manifest içinde yer alıyor
    • Content-Type: octet-stream gayet iyi çalışabilir
  • OCI Distribution spesifikasyonunun iyi tasarlanmadığı yönünde bir görüş var

    • Katman push işlemleri sıralı olarak yapılmak zorunda
    • DockerHub ve GHCR'de parça parça yükleme düzgün çalışmıyor
    • Content-Range değer biçimi RFC7233 biçimiyle uyuşmuyor
    • Etiket listesinin sayfalamasını standartlaştırma fırsatı kaçırılmış
  • Cloudflare'ın R2 kullanan bir container registry sunucusunu açık kaynak yaptığı bilgisi var

    • Bunu kullanmış olan biri olup olmadığı merak ediliyor
  • OCI spesifikasyonunda katman push işlemlerinin neden sıralı olmak zorunda olduğunu bilmek isteyen bir görüş var

    • Tek bir katmanın içeriği sıralı olarak push edilmek zorunda
    • Birden fazla katmanı paralel olarak push etmek ise mümkün
  • Nexus kullanma nedenleri ile artıları ve eksileri hakkında bir görüş var

    • Çeşitli paketleri ve repository'leri destekliyor
    • Yapılandırma ve kaynak kullanımı zahmetli
    • Docker pull istekleri yalnızca basit HEAD ve GET isteklerinden oluşuyor
    • Daha basit container registry'lerin az olması şaşırtıcı bulunuyor
  • CNCF'nin Distribution projesinin, Cloudfront imzalı URL'ler üzerinden S3'ten registry yedeklemeyi desteklediği bilgisi var

  • S3 ve R2 maliyetlerinden hiç bahsedilmemesi üzücü bulunuyor

  • ECR'nin image layer'ları birden fazla parça halinde yüklemeyi desteklediği bilgisi var

    • İlgili API'ler:
      • InitiateLayerUpload API: Her image layer yüklemesinin başında çağrılır
      • UploadLayerPart API: Her layer chunk yüklemesinde çağrılır (en fazla 20MB)
      • PutImage API: Layer yüklemesinden sonra image manifest push edilirken çağrılır
    • Layer chunk'larını base64 encoding ile yüklemek gerekmesi tuhaf bulunuyor
  • Docker Registry hakkında şikayetler var

  • Kişisel bir container registry'nin neden var olması gerektiğini anlamadığını söyleyen bir görüş var

    • Sadece image dosyaları üretip yönetmenin daha iyi olabileceği düşünülüyor