docker-registryを使う

2020年12月21日

docker-registryを使う

コンテナイメージファイルをプライベートサーバに保存したいときはdocker-registryですね。gitlabみたいな感じです。
「registry_container」と言うレジストリ用のコンテナを作成して、その中にイメージファイル「target_image」を格納してみます。

レジストリを作成する

docker-registryのイメージを取得します。


docker pull registry

イメージファイルの確認します。


docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2d4f4b5309b1        4 weeks ago         26.2MB

レジストリコンテナを作成します。


docker run -d -p 5000:5000 --name registry_container registry

格納するイメージを作成する

dockerfileを作成します。


vi dockerfile

#下記を記述
MAINTAINER Houdoukyokucho
CMD /sbin/init

ビルドしてイメージを作成します。


docker build -t localhost:5000/target_image .

ビルドしたイメージを確認します。


localhost:5000/target_image   latest              7fee8b9a4102        44 seconds ago      203MB
registry                      latest              2d4f4b5309b1        4 weeks ago         26.2MB

pushとpull

「target_image」を「registry_container」にpushします。


docker push localhost:5000/target_image

「target_image」を削除します。


docker rmi localhost:5000/target_image

「target_image」が削除されているのを確認します。


registry            latest              2d4f4b5309b1        4 weeks ago         26.2MB

レジストリ内のイメージファイルを確認します。


curl http://localhost:5000/v2/_catalog
{"repositories":["target_image"]}

レジストリの「registry_container」からイメージファイル「target_image」をpullします。


docker pull localhost:5000/target_image

pullしたファイルがあるかを確認します。


docker images
localhost:5000/target_image   latest              7fee8b9a4102        9 minutes ago       203MB
registry                      latest              2d4f4b5309b1        4 weeks ago         26.2MB

無事target_imageをpull出来た事が確認できました。

レジストリコンテナ内のイメージ削除

レジストリコンテナを作成する。


docker run -e REGISTRY_STORAGE_DELETE_ENABLED=true -d -p 5000:5000 --name registry_container registry

コンテナのヘッダー情報を取得して「Digest情報」を確認する。


#curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" http://[IP:PORT]/v2/[イメージ名]/manifests/[タグ名] | grep Docker-Content-Digest
curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" http://localhost:5000/v2/target_image/manifests/latest | grep Docker-Content-Digest
Docker-Content-Digest: sha256:8d5c5c4734caeb0a607987928c3dc92618995039425f9a3d6a5e7e0868163e6a

レジストリコンテナ内のイメージを削除する。


curl -X DELETE -D - http://localhost:5000/v2/target_image/manifests/sha256:8d5c5c4734caeb0a607987928c3dc92618995039425f9a3d6a5e7e0868163e6a

HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Tue, 21 Jul 2020 09:51:03 GMT
Content-Length: 0

残る場合...


docker exec -it registry_container sh
rm -rf /var/lib/registry/docker/registry/v2/repositories/target_image
docker restart registry_container

参考:
  ・Docker Registryを構築する
  ・Dockerのプライベートレジストリからimageを削除する方法
  ・Docker Registry の使い方

2020年12月21日