CentOS7上でDockerRegistryを使ってみる

レジストリとは

レジストリとは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"]}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA