1 poin oleh GN⁺ 2024-07-13 | 1 komentar | Bagikan ke WhatsApp

Menggunakan S3 sebagai registri kontainer

  • Selama 4 bulan terakhir, telah dikembangkan image builder kontainer kustom bersama Outerbounds
  • Menemukan bahwa S3 bisa digunakan sebagai registri kontainer
  • Dengan mengekspos bucket S3 melalui HTTP dan mengunggah image ke path tertentu, image dapat diambil dengan perintah docker pull

Demo

  • Membuat image kontainer yang menjalankan cowsay lalu mengunggahnya ke bucket S3
  • Menggunakan R2 untuk menyediakan egress gratis
  • R2 dan S3 kompatibel pada tingkat API
$ docker run --rm pub-40af5d7df1e0402d9a92b982a6599860.r2.dev/cowsay

Mengapa menggunakan S3?

  • Secara tradisional orang menggunakan DockerHub, GitHub Container Registry, ECR, dan lain-lain
  • S3 memiliki keunggulan besar dalam kecepatan unggah
  • Hasil perbandingan kecepatan unggah antara ECR dan S3 menunjukkan bahwa S3 bisa hingga 8 kali lebih cepat

Mengapa S3 lebih cepat

  • S3 dapat mengunggah chunk dari satu layer secara paralel
  • ECR harus mengunggah secara berurutan karena mematuhi OCI Distribution Spec
  • Karena tidak bisa melakukan unggah paralel, ECR tidak dapat memanfaatkan bandwidth secara penuh

S3 bukan registri kontainer

  • Secara ketat, S3 bukanlah registri kontainer
  • Perintah docker pull mengunduh file melalui permintaan HTTP
  • Jika bucket S3 dikonfigurasi dengan tepat, S3 dapat digunakan sebagai registri kontainer

Hal yang perlu diperhatikan

  • Metode ini sangat eksperimental
  • Tidak menyediakan fitur registri kontainer yang sudah ada (misalnya pemindaian keamanan, kontrol akses, dan sebagainya)
  • Masih diperlukan riset tambahan

PS. Lalu pausnya?

  • Ini adalah lelucon yang merujuk pada logo Docker

Ringkasan GN⁺

  • Tulisan ini menjelaskan cara menggunakan S3 sebagai registri kontainer
  • Kecepatan unggah S3 yang tinggi dapat dimanfaatkan
  • Karena tidak menyediakan fitur registri kontainer yang sudah ada, perlu kehati-hatian
  • Ini adalah pendekatan yang eksperimental tetapi menarik
  • Proyek lain dengan fungsi serupa mencakup DockerHub, GitHub Container Registry, dan ECR

1 komentar

 
GN⁺ 2024-07-13
Komentar Hacker News
  • Ada pendapat bahwa akan bagus jika spesifikasi OCI Distribution mendukung file statis

    • Ini akan memungkinkan penggunaan langsung server HTTP sederhana atau protokol file
    • Semua metadata sudah tercakup di dalam manifest
    • Content-Type: octet-stream mungkin dapat berfungsi dengan baik
  • Ada pendapat bahwa spesifikasi OCI Distribution tidak dirancang dengan baik

    • Push layer harus dilakukan secara berurutan
    • Upload chunk tidak berfungsi dengan semestinya di DockerHub dan GHCR
    • Format nilai Content-Range tidak sesuai dengan format RFC7233
    • Kesempatan untuk menstandarkan paginasi daftar tag terlewatkan
  • Ada informasi bahwa Cloudflare telah meng-open-source-kan server container registry yang menggunakan R2

    • Penasaran apakah ada yang sudah mencobanya
  • Ada pendapat yang ingin mengetahui alasan mengapa push layer harus dilakukan secara berurutan dalam spesifikasi OCI

    • Isi dari satu layer tunggal harus di-push secara berurutan
    • Beberapa layer tetap bisa di-push secara paralel
  • Ada pendapat tentang alasan menggunakan Nexus serta kelebihan dan kekurangannya

    • Mendukung berbagai paket dan repositori
    • Konfigurasi dan penggunaan resource cukup merepotkan
    • Permintaan Docker pull terdiri hanya dari permintaan HEAD dan GET yang sederhana
    • Mereka terkejut karena container registry yang lebih sederhana masih kurang tersedia
  • Ada informasi bahwa CNCF Distribution mendukung pencadangan registry dari S3 melalui URL bertanda tangan Cloudfront

  • Ada pendapat bahwa sayang sekali tidak ada pembahasan mengenai biaya S3 dan R2

  • Ada informasi bahwa ECR mendukung upload image layer dalam beberapa bagian

    • API terkait:
      • API InitiateLayerUpload: dipanggil saat memulai upload tiap image layer
      • API UploadLayerPart: dipanggil saat meng-upload tiap chunk layer (maksimum 20MB)
      • API PutImage: dipanggil saat me-push manifest image setelah upload layer selesai
    • Terasa aneh bahwa chunk layer harus di-upload dengan encoding base64
  • Ada keluhan tentang Registry milik Docker

  • Ada pendapat bahwa mereka tidak memahami alasan keberadaan container registry pribadi

    • Mungkin akan lebih baik jika cukup membuat dan mengelola file image saja