⚠️ 記事内に広告を含みます。

プライベートなdockerレジストリを利用する

dockerレジストリを利用してプライベートなdockerレジストリを構築します。

Dockerレジストリとは?

コンテナイメージを保存しておく場所でdocekr pullコマンドでイメージをダウンロードできます。

DockerレジストリはCI/CDシステム内で利用するのが良いです。

ソースコードのコミットをトリガーとして、Dockerレジストリのイメージをプルしてイメージをビルドしてアプリケーションをデプロイというような使い方ができます。

ここではDocker Hubのようなパブリックなレジストリではなく、プライベートなDokcerレジストリを構築します。(DockerHubでもプライベートレジストリを構築できますが無料では制限があります)

Dockerレジストリを構築する

プライベートなDockerレジストリを構築する方法は複数ありますが、ここではDocker registryを利用します。

https://docs.docker.jp/registry/deploying.html

ローカルで構築

##データ永続化のためにボリュームを作成
$ docker volume create registry

$ docker run -d -p 5000:5000 --restart=always --name registry -v registry:/var/lib/registry registry:2


##イメージをプルする
$ docker pull gcr.io/distroless/base-debian11

##イメージにタグ付けする
# docker tag gcr.io/distroless/base-debian11 localhost:5000/base-debian11

# docker images | grep base
gcr.io/distroless/base-debian11            latest      4557b0facd59   5 days ago     20.3MB
localhost:5000/base-debian11               latest      4557b0facd59   5 days ago     20.3MB


## 作成したイメージを作成したdockerレジストリにpushする
# docker push localhost:5000/base-debian11

##レジストリから取得する
# docker images | grep localhost
localhost:5000/base-debian11               latest      4557b0facd59   5 days ago     20.3MB

## レジストリからイメージをプルして確認する
## ローカルのイメージを一度削除
# docker image rm localhost:5000/base-debian11
Untagged: localhost:5000/base-debian11:latest
Untagged: localhost:5000/base-debian11@sha256:3083f1ef2e91c5d5a1268b8372e82520c888c71b79d847be5a92cbe4f801b9dc

# docker images | grep localhost

## ローカルレジストリからイメージをpullする
# docker pull localhost:5000/base-debian11
Using default tag: latest
latest: Pulling from base-debian11
Digest: sha256:3083f1ef2e91c5d5a1268b8372e82520c888c71b79d847be5a92cbe4f801b9dc
Status: Downloaded newer image for localhost:5000/base-debian11:latest
localhost:5000/base-debian11:latest

## プルしたイメージの確認
# docker images | grep localhost
localhost:5000/base-debian11               latest      4557b0facd59   5 days ago     20.3MB

ドメインとTLSを設定する

外部に公開してプルするためにドメインを設定し、セキュリティのためにTLSを設定します。

1.サーバのIPを設定したドメインを用意する(myregistrydomain.com)
2. myregistrydomian.comの証明書を取得する(Let’sencryptなど)
3. 取得した証明書をサーバの実行ディレクトリの配下certsディレクトリの下に置く

$ mkdir certs

##let'sの証明書は中間証明書と連結する必要がある
$ cat /etc/letsencrypt/live/myregistrydomain.com/cert.pem /etc/letsencrypt/live/myregistrydomain.com/fullchain.pem > ./certs/domain.crt
$ cat /etc/letsencrypt/live/myregistrydomain.com/privkey.pem > ./certs/domain.key

$ docker run -d -p 5000:5000 --restart=always --name registry \ 
  -v `pwd`/certs:/certs  \
  -v registry:/var/lib/registry  \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt  \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key  \
  registry:2


##プライベートレジストリ上にイメージをプッシュしておき、別のサーバからプルする
$ docker pull myregistrydomain.com:5000/base-debian11

セキュリティ上の問題があるため、アクセス制限を設定しましょう。

basic認証やトークン認証を設定できるそうです。今回はfirewallでIP制限を行いました。

Docker Registryの操作方法

リポジトリの一覧などは提供されているAPIで確認します。

$ curl  https://myregistrydomain.com:5000/v2/_catalog
{"repositories":["base-debian11"]}

イメージの削除はちょっとめんどくさいです。下記のリンクを参考にしてください。

https://qiita.com/Gin/items/c58c4485caae1c139e8f

コメントを残す

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