S3をコンテナレジストリとして使う
- この4か月間、Outerboundsと協力してカスタムコンテナイメージビルダーを開発してきた
- S3をコンテナレジストリとして使えることを発見した
- S3バケットをHTTPで公開し、特定のパスにイメージをアップロードすると、
docker pullコマンドでイメージを取得できる
デモ
cowsayを実行するコンテナイメージを作成し、S3バケットにアップロードした
- 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リクエストを通じてファイルをダウンロードする
- S3バケットを適切に構成すれば、コンテナレジストリとして使える
注意事項
- この方法は非常に実験的である
- 既存のコンテナレジストリの機能は提供しない(例: セキュリティスキャン、アクセス制御など)
- さらなる調査が必要である
PS. クジラは?
GN⁺のまとめ
- この記事はS3をコンテナレジストリとして使う方法を説明している
- S3の高速なアップロード速度を活用できる
- 既存のコンテナレジストリの機能は提供しないため注意が必要である
- 実験的だが興味深いアプローチである
- 類似の機能を提供する他のプロジェクトとしてはDockerHub、GitHub Container Registry、ECRなどがある
1件のコメント
Hacker News の意見
OCI Distribution 仕様が静的ファイルをサポートしてくれるとよい、という意見がある
Content-Type: octet-streamでうまく動作する可能性があるOCI Distribution 仕様は設計があまり良くない、という意見がある
Content-Rangeの値の形式が RFC7233 の形式と一致していないCloudflare が R2 を使ったコンテナレジストリサーバーをオープンソース化した、という情報がある
OCI 仕様でレイヤーのプッシュを順番に行う必要がある理由を知りたい、という意見がある
Nexus を使う理由と、その長所・短所についての意見がある
CNCF の Distribution が、Cloudfront の署名付き URL を通じて S3 からレジストリをバックアップする機能をサポートしている、という情報がある
S3 と R2 のコストへの言及がないのが残念、という意見がある
ECR はイメージレイヤーを複数のパートに分けてアップロードすることをサポートしている、という情報がある
Docker の Registry に対する不満がある
個人用コンテナレジストリの存在意義が理解できない、という意見がある