LoginSignup
0
2

More than 3 years have passed since last update.

CentOS 7 で Docker Registry をローカルに立てる

Last updated at Posted at 2020-09-29

はじめに

DockerHub にいろいろとイメージがあるものの、自分で作った Docker image を自分のRegistry において好きな時にダウンロードして起動したいと思ってきた。

Dockerfile を用意して DockerHub からダウンロードした Docker image から作成してもいいのだけど意外と時間がかかるので、準備完了状態のイメージを用意して、どっかの Docker のサーバーに置いておきたい。

HTTPS で証明書登録した通信もできるが、内部的な利用のためあくまで、さくっと利用できる環境を用意する方法です。

サーバとクライアントで2つの環境 (VMなど) を用意しておいてください。

手順

大まかに以下の手順

  • docker のインストール
  • docker の起動
  • Docker Registry の用意
  • サーバ側でイメージの用意(ダウンロードとRegistry)
  • Docker Registry からイメージのダウンロード
    • サーバ側でダウンロード
    • クライアント側でダウンロード

Docker のインストール

Redistry のサーバ、クライアント側にインストールする必要がある。
docker を rpm インストールするにはダウンロード先登録が必要。

yum -y install yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce

Docker の起動

Redistry のサーバ、クライアント側で docker のサービスを起動し、OS起動時に自動起動させる。

systemctl start docker
systemctl enable docker

Docker Registry の用意

Registry のサーバで、Registry のイメージをダウンロードする

docker pull registry

以下のように docker image が追加される

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2d4f4b5309b1        3 months ago        26.2MB

Docker Registry の起動

Docker Registry を起動する。
このとき、Registry 上のイメージを永続化させたいのでホスト OS のディレクトリをコンテナにマウントさせる。

docker run -d -p 5000:5000 \
    -v /var/opt:/var/lib/registry \
    registry

コンテナが起動したことを確認

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
35b3882b8536        registry            "/entrypoint.sh /etc…"   About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp   dreamy_roentgen

ホスト OS に以下のようなディレクトリができて、この下にマウントされる。

ls /var/opt/docker/registry/v2/
blobs  repositories

イメージを登録すると以下のように repositories 以下にイメージが保存されるディレクトリである。

ls -l /var/opt/docker/registry/v2/repositories/aaa
合計 0
drwxr-xr-x 5 root root 55  9月 16 15:33 centos_local

サーバ側でイメージの用意(ダウンロードとRegistry)

ローカルの Repository サーバに登録する元のイメージをダウンロード

なんでもいいが、とりあえず CentOS をダウンロード

docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd

ダウンロードできたことを確認

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        5 weeks ago         215MB
registry            latest              2d4f4b5309b1        2 months ago        26.2MB

docker Resistry へ登録するイメージを作成(タグ付け)

本来は Dockerfile などを利用して様々なツールや設定をしたイメージを作るのだが、今回は単純にダウンロードした CentOS のイメージをそのまま使う

docker tag centos localhost:5000/aaa/centos_local:1.0

タグ付けをすると以下のようにイメージができる

docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
centos                              latest              0d120b6ccaa8        5 weeks ago         215MB
localhost:5000/aaa/centos_local   1.0                 0d120b6ccaa8        5 weeks ago         215MB
registry                            latest              2d4f4b5309b1        2 months ago        26.2MB

docker Resistry へイメージを登録

タグ付けしたイメージを docker Registry へ登録する

docker push localhost:5000/aaa/centos_local:1.0
The push refers to repository [localhost:5000/iseki/centos_local]
291f6e44771a: Pushed
1.0: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529

登録後は、イメージは不要になるので削除

docker rmi localhost:5000/iseki/centos_local:1.0
Untagged: localhost:5000/iseki/centos_local:1.0
Untagged: localhost:5000/iseki/centos_local@sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71

削除後、一覧にイメージがないことを確認

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        5 weeks ago         215MB
registry            latest              2d4f4b5309b1        2 months ago        26.2MB

Docker Registry からイメージのダウンロード

サーバ側でダウンロード

サーバからからは以下のコマンドを実行してダウンロードできる

docker pull localhost:5000/aaa/centos_local:1.0

クライアント側でダウンロード

クライアント側からは、「クライアント側」に以下の設定を入れないと接続ができない

cat /etc/docker/daemon.json
{ "insecure-registries":["<Docker RegistoryのサーバーIP、またはホスト名>:5000"] }

上記の設定をして、docker のサービスを再起動

systemctl restart docker

この状態で、docker Registroy サーバからイメージを取得するコマンドを実行する。

docker pull 10.1.5.25:5000/aaa/centos_local:1.0
1.0: Pulling from iseki/centos_local
3c72a8ed6814: Pull complete
Digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
Status: Downloaded newer image for 10.1.5.25:5000/aaa/centos_local:1.0
10.1.5.25:5000/aaa/centos_local:1.0

docker のイメージがダウンロードされる

# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
10.1.5.25:5000/aaa/centos_local   1.0                 0d120b6ccaa8        7 weeks ago         215MB
0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2