S3 als Container-Registry verwenden
- In den letzten 4 Monaten wurde in Zusammenarbeit mit Outerbounds ein benutzerdefinierter Builder für Container-Images entwickelt
- Dabei wurde entdeckt, dass sich S3 als Container-Registry verwenden lässt
- Wenn man einen S3-Bucket per HTTP bereitstellt und Images unter einem bestimmten Pfad hochlädt, können sie mit dem Befehl
docker pull abgerufen werden
Demo
- Es wurde ein Container-Image erstellt, das
cowsay ausführt, und in einen S3-Bucket hochgeladen
- Für kostenlosen Egress wurde R2 verwendet
- R2 und S3 sind API-kompatibel
$ docker run --rm pub-40af5d7df1e0402d9a92b982a6599860.r2.dev/cowsay
Warum S3 verwenden?
- Traditionell werden DockerHub, GitHub Container Registry, ECR usw. verwendet
- S3 bietet einen großen Vorteil bei der Upload-Geschwindigkeit
- Beim Vergleich der Upload-Geschwindigkeit von ECR und S3 war S3 bis zu 8-mal schneller
Warum ist S3 schneller?
- S3 kann die Chunks einer einzelnen Layer parallel hochladen
- ECR muss zur Einhaltung der OCI Distribution Spec sequentiell hochladen
- Da bei ECR kein paralleler Upload möglich ist, kann die verfügbare Bandbreite nicht voll ausgeschöpft werden
S3 ist keine Container-Registry
- Streng genommen ist S3 keine Container-Registry
- Der Befehl
docker pull lädt Dateien über HTTP-Anfragen herunter
- Wenn ein S3-Bucket passend konfiguriert ist, kann er als Container-Registry verwendet werden
Hinweise
- Diese Methode ist stark experimentell
- Sie bietet nicht die Funktionen bestehender Container-Registries (z. B. Security-Scanning, Zugriffskontrolle usw.)
- Weitere Untersuchungen sind notwendig
PS. Und der Wal?
- Das ist ein Scherz mit Verweis auf das Docker-Logo
Zusammenfassung von GN⁺
- Dieser Artikel erklärt, wie sich S3 als Container-Registry verwenden lässt
- Die schnelle Upload-Geschwindigkeit von S3 kann genutzt werden
- Vorsicht ist geboten, da die Funktionen bestehender Container-Registries nicht geboten werden
- Es ist ein experimenteller, aber interessanter Ansatz
- Andere Projekte mit ähnlicher Funktionalität sind DockerHub, GitHub Container Registry und ECR
1 Kommentare
Hacker-News-Kommentare
Es gibt die Meinung, dass die OCI-Distribution-Spezifikation statische Dateien unterstützen sollte
Content-Type: octet-streamkönnte gut funktionierenEs gibt die Meinung, dass die OCI-Distribution-Spezifikation nicht gut entworfen ist
Content-Range-Werts stimmt nicht mit dem RFC7233-Format übereinEs gibt die Information, dass Cloudflare einen Open-Source-Container-Registry-Server auf Basis von R2 veröffentlicht hat
Es gibt die Meinung, dass man verstehen möchte, warum Layer-Pushes in der OCI-Spezifikation sequentiell erfolgen müssen
Es gibt Meinungen zu den Gründen für die Nutzung von Nexus sowie zu Vor- und Nachteilen
Es gibt die Information, dass die CNCF-Distribution das Spiegeln einer Registry aus S3 über CloudFront-signierte URLs unterstützt
Es gibt die Meinung, dass es schade ist, dass die Kosten von S3 und R2 nicht erwähnt wurden
Es gibt die Information, dass ECR das Hochladen von Image-Layern in mehreren Teilen unterstützt
Es gibt Unzufriedenheit mit Dockers Registry
Es gibt die Meinung, dass man den Sinn privater Container-Registries nicht versteht