レジストリとは
レジストリとはDockerにおける重要な機能の内の一つでよく理解しておく必要があります。端的に言ってイメージなどを共有する保管場所のことです。GitHubのイメージ版の様な物でしょうか。公式にパブリックなレジストリサービスもありますが、今回はレジストリ用のコンテナを作成してローカルリポジトリを作ることが目標です。
構築
レジストリイメージをダウンロードする。バージョンを指定しなければ最新版がダウンロードされます。
$ docker pull registory
落としたイメージを元にコンテナを起動します。
$ docker run -d -p 5000:5000 -v /var/opt:/var/lib/registry registry
- -d
- バックグラウンド
- -p 【localhostポート】:【containerポート】
- localhost:5000をdocker内5000ポートにフォワーディング
- -v 【localhostファイルシステム】:【containerファイルシステム】
- マウント
先程作成したレジストリにプッシュするためのイメージをビルドします。
FROM centos:7
# update
RUN yum -y update && yum clean all
# set locale
RUN yum reinstall -y glibc-common && yum clean all
ENV LANG ja_JP.UTR-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTR-8
RUN unlink /etc/localtime
RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime
# editor install
RUN yum install -y vim && yum clean all
$ docker build -t labo:centos7 .
レジストリにプッシュするイメージにはタグ(別名)をつける必要があります。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
labo centos7 ed9adb9edf7f 7 seconds ago 406 MB
docker.io/registry latest 708bc6af7e5e 2 weeks ago 25.8 MB
docker.io/centos 7 5e35e350aded 3 months ago 203 MB
$ docker tag labo:centos7 localhost:5000/momozo/centos:7.7
※docker tag <イメージ名>:<tag> <レジストリのIP>:<ポート>/<任意のリポジトリ名>/<イメージ名>:<tag>
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
labo centos7 ed9adb9edf7f 5 minutes ago 406 MB
localhost:5000/momozo/centos 7.7 ed9adb9edf7f 5 minutes ago 406 MB
docker.io/registry latest 708bc6af7e5e 2 weeks ago 25.8 MB
docker.io/centos 7 5e35e350aded 3 months ago 203 MB
タグを付けたイメージをプッシュします。SELinuxは無効にして下さい。
$ docker push localhost:5000/momozo/centos:7.7
※docker push 【イメージ名】 ← レポジトリにイメージが登録される
エラーが無ければプッシュが成功しております。タグ名を付ける際にレポジトリ名を省略するとイメージ名がレポジトリ名となり、その中にイメージ名がプッシュされます。localhost:5000は慣習として付けているのかな。
試験
レジストリとして動作しているかプルして試験してみます。先程プッシュしたイメージをローカルから消去します。
$ docker rmi localhost:5000/momozo/centos:7.7
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
labo centos7 ed9adb9edf7f 22 minutes ago 406 MB
docker.io/registry latest 708bc6af7e5e 2 weeks ago 25.8 MB
docker.io/centos 7 5e35e350aded 3 months ago 203 MB
プルします。
$ docker pull localhost:5000/momozo/centos:7.7
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
labo centos7 ed9adb9edf7f 24 minutes ago 406 MB
localhost:5000/momozo/centos 7.7 ed9adb9edf7f 24 minutes ago 406 MB
docker.io/registry latest 708bc6af7e5e 2 weeks ago 25.8 MB
docker.io/centos 7 5e35e350aded 3 months ago 203 MB
レジストリを可視化するのは以下のコンテナが公開されております。
$ docker run -d -e ENV_DOCKER_REGISTRY_HOST=【ローカルホストIP】 -e ENV_DOCKER_REGISTRY_PORT=【レジストリコンテナのポート】 -p 8080:80 konradkleine/docker-registry-frontend:v2
1. curlコマンドでも確認が出来ます。
$ curl http://【ローカルホストIP】:5000/v2/_catalog
{"repositories":["momozo/centos"]}
2. curlコマンドでレポジトリのタグを確認するには
$ curl http://【ローカルホストIP】:5000/v2/【レポジトリ名】/tags/list
{"name":"momozo/centos","tags":["7.7"]}