はじめに
v3.1.1のリリース系列であるregistry:3イメージで検証済み。コマンドはホストに Docker があることを想定する。
前提
- Docker がインストールされ稼働していること。レジストリは
registryイメージのインスタンスであり、Docker の中で動く (deploying ドキュメント)。 - ローカルの空きポート 1 つ。例では
5000を使う。
イメージ同梱のデフォルト設定は開発向けだ。ログレベルは debug で、OpenTelemetry のエクスポートが有効になっている。ローカルテストを超える用途では、その前段に TLS とアクセス制御の仕組みが必要になる (deploying ドキュメント)。
インストール
ビルドするものは無い。公式イメージを動かす。
docker run -d -p 5000:5000 --restart=always --name registry registry:3これでレジストリが localhost:5000 で待ち受ける。この構成はテスト専用で、本番のレジストリは TLS で保護しなければならない (deploying ドキュメント)。
最初の動く構成
イメージをローカルレジストリに push し、また pull し戻す。これで blob upload と blob GET のパスを端から端まで動かす。
push する対象として、小さい公開イメージを pull する。
bashdocker pull ubuntu:16.04ローカルレジストリ向けにタグ付けする。タグの先頭がホストとポートのとき、Docker は push 時にそれをレジストリの場所として扱う。
bashdocker tag ubuntu:16.04 localhost:5000/my-ubuntupush する。これで POST/PATCH/PUT の blob upload セッションが走り、各 blob が digest チェックで確定される。
bashdocker push localhost:5000/my-ubuntuローカルのコピーを消し、自分のレジストリから pull してイメージが返ってくることを確かめる。
bashdocker image remove ubuntu:16.04 docker image remove localhost:5000/my-ubuntu docker pull localhost:5000/my-ubuntu
動作確認
レジストリは OCI Distribution API を /v2/ 以下に公開する。base チェックは 200 を返す。
curl -s http://localhost:5000/v2/push が着地したかを確かめるには、リポジトリのタグを API 経由で一覧する。
curl -s http://localhost:5000/v2/my-ubuntu/tags/listmy-ubuntu とそのタグを含む JSON が返れば、blob が保存され、link され、返し配信されているということだ。
次に読むもの
ストレージドライバ (S3・GCS・Azure Blob)・TLS・認証・ロードバランサ配下での運用は、公式ドキュメント https://distribution.github.io/distribution/ の configuration と deployment ガイドに従う。本番のレジストリは、Distribution 単体ではなく Harbor のようなより大きな製品のコンポーネントとして動かされることが多い。Distribution 自身は RBAC・スキャン・UI を含まないためだ。