การใช้ S3 เป็นคอนเทนเนอร์รีจิสทรี
- ตลอด 4 เดือนที่ผ่านมาได้ร่วมมือกับ Outerbounds เพื่อพัฒนาตัวสร้างอิมเมจคอนเทนเนอร์แบบคัสตอม
- พบว่าสามารถใช้ S3 เป็นคอนเทนเนอร์รีจิสทรีได้
- หากเปิดเผย S3 bucket ผ่าน HTTP และอัปโหลดอิมเมจไปยังพาธที่กำหนด ก็สามารถดึงอิมเมจด้วยคำสั่ง
docker pull ได้
เดโม
- สร้างอิมเมจคอนเทนเนอร์ที่รัน
cowsay แล้วอัปโหลดไปยัง S3 bucket
- ใช้ R2 เพื่อให้ egress ฟรี
- R2 และ S3 เข้ากันได้ในระดับ API
$ docker run --rm pub-40af5d7df1e0402d9a92b982a6599860.r2.dev/cowsay
ทำไมต้องใช้ S3?
- โดยปกติจะใช้ DockerHub, GitHub Container Registry, ECR เป็นต้น
- S3 มีข้อได้เปรียบอย่างมากในด้านความเร็วการอัปโหลด
- จากการเปรียบเทียบความเร็วอัปโหลดระหว่าง ECR และ S3 พบว่า S3 เร็วได้สูงสุดถึง 8 เท่า
เหตุผลที่ S3 เร็วกว่า
- S3 สามารถอัปโหลดชังก์ของเลเยอร์เดียวแบบขนานได้
- ECR ปฏิบัติตาม OCI Distribution Spec จึงต้องอัปโหลดแบบลำดับ
- ECR ที่ไม่สามารถอัปโหลดแบบขนานได้จึงใช้แบนด์วิดท์ได้ไม่เต็มที่
S3 ไม่ใช่คอนเทนเนอร์รีจิสทรี
- หากพูดอย่างเคร่งครัด S3 ไม่ใช่คอนเทนเนอร์รีจิสทรี
- คำสั่ง
docker pull จะดาวน์โหลดไฟล์ผ่าน HTTP request
- หากตั้งค่า S3 bucket อย่างเหมาะสม ก็สามารถใช้เป็นคอนเทนเนอร์รีจิสทรีได้
ข้อควรระวัง
- วิธีนี้ยังอยู่ในขั้นทดลองอย่างมาก
- ไม่ได้มีฟีเจอร์ของคอนเทนเนอร์รีจิสทรีแบบเดิมครบถ้วน (เช่น security scanning, access control เป็นต้น)
- ยังต้องมีการศึกษาเพิ่มเติม
PS. แล้ววาฬล่ะ?
- เป็นมุกให้ไปดูโลโก้ Docker
สรุปโดย GN⁺
- บทความนี้อธิบายวิธีใช้ S3 เป็นคอนเทนเนอร์รีจิสทรี
- สามารถใช้ประโยชน์จากความเร็วการอัปโหลดที่สูงของ S3 ได้
- ควรระวังเพราะไม่ได้มีฟีเจอร์ของคอนเทนเนอร์รีจิสทรีแบบเดิม
- เป็นแนวทางที่ยังอยู่ในขั้นทดลองแต่ก็น่าสนใจ
- โปรเจ็กต์อื่นที่มีฟังก์ชันคล้ายกัน ได้แก่ DockerHub, GitHub Container Registry, ECR เป็นต้น
1 ความคิดเห็น
ความเห็นจาก Hacker News
มีความเห็นว่าอยากให้สเปก OCI Distribution รองรับไฟล์แบบสแตติก
Content-Type: octet-streamน่าจะทำงานได้ดีมีความเห็นว่าสเปก OCI Distribution ออกแบบมาได้ไม่ดีนัก
Content-Rangeไม่ตรงกับรูปแบบ RFC7233มีข้อมูลว่า Cloudflare ได้โอเพนซอร์สเซิร์ฟเวอร์ container registry ที่ใช้ R2
มีความเห็นว่าอยากรู้เหตุผลว่าทำไมในสเปก OCI จึงกำหนดให้การ push เลเยอร์ต้องทำแบบลำดับต่อเนื่อง
มีความเห็นเกี่ยวกับเหตุผลที่ใช้ Nexus รวมถึงข้อดีข้อเสีย
มีข้อมูลว่า Distribution ของ CNCF รองรับความสามารถในการแบ็กอัป registry จาก S3 ผ่าน URL ที่เซ็นด้วย Cloudfront
มีความเห็นว่าน่าเสียดายที่ไม่มีการพูดถึงต้นทุนของ S3 และ R2
มีข้อมูลว่า ECR รองรับการอัปโหลด image layer เป็นหลายส่วน
มีความไม่พอใจต่อ Registry ของ Docker
มีความเห็นว่าไม่เข้าใจเหตุผลในการมี private container registry