Docker: 独自のレジストリ(HTTP)を配備


前提


ドキュメント


Dockerレジストリ: Dockerイメージを配布するサーバ

公式レジストリ(Docker Hub)

独自のレジストリ

Docker公式イメージregistry:2で起動する。

レジストリの指定書式


ローカルネットで使うHTTPレジストリ起動

registry:2イメージ

docker run --rm --detach --publish 5000:5000 \
  --mount type=volume,source=my-image,destination=/var/lib/registry \
  --name myregistry registry:2

pushとpull例

# ローカルの既存イメージに、レジストリ用のタグを付ける
docker image tag alpine localhost:5000/myalpine

# レジストリにpush
docker push localhost:5000/myalpine

docker pull localhost:5000/myalpine

外部ホストからHTTPアクセス: クライアント側設定

「Insecure Registries」の登録

# 未登録レジストリへの、HTTPアクセスはエラー
Error response from daemon: Get https://IPアドレス:5000/v2/: http: server gave HTTP response to HTTPS client

/etc/docker/daemon.json

{
  "insecure-registries" : ["IPアドレスかドメイン:5000"]
}

Dockerエンジン再起動

systemctl restart docker

# 確認
docker info
(中略)
Insecure Registries:
 レジストリ:5000
 127.0.0.0/8

独自レジストリのイメージ検索: HTTP APIを使う

リポジトリ一覧: GET /v2/_catalog

# curlコマンドでGETメソッド、結果はjson
registry=localhost
curl -X GET $registry:5000/v2/_catalog
{"repositories":["myalpine","myubuntu"]}

タグ一覧: GET /v2/イメージ/tags/list

registry=localhost
image=myalpine
curl -X GET $registry:5000/v2/$image/tags/list
{"name":"myalpine","tags":["latest","old"]}