ぴよ丸水産

週末ファゴッティストによる技術ブログ

【GitLab】【Docker】GitLabにDocker Container Registryの機能をつける

はじめに

EC2上のDockerコンテナで運用しているGitLabに、
Docker Container Registryの機能をつけてみました。

GitLabのプロジェクトで
Dockerコンテナイメージを管理できるようになります。

動作確認環境

※既存の環境は基本的にIPで通信する運用
※GitLabコンテナはdocker-composeで起動
※docker-compose.ymlの公開はできませんが、下記のような感じです。

qiita.com

【GitLabサーバ】

【クライアント】

  • Docker:18.06.1

サーバ側手順

1. 新しいマウント用のディレクトリを作成し、秘密鍵サーバ証明書を生成

下記のコマンドで、オレオレ証明書を作成します。

# cd (docker-compose.ymlがあるディレクトリ)
# mkdir ssl
# openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ./ssl/registry.gitlab.example.com.key \
-x509 -days 365 -out ./ssl/registry.gitlab.example.com.crt

対話形式で国やら都道府県やらを登録していきます。
Common Nameは
registry.gitlab.example.com
にしないとだめでした。

ssl/配下にregistry.gitlab.example.com.keyと
registry.gitlab.example.com.crtが生成されました。

# ls ssl
registry.gitlab.example.com.key  registry.gitlab.example.com.crt

2. 作成した秘密鍵サーバ証明書をマウントする設定をdocker-compose.ymlに追記

(省略)
volumes:
  - ./ssl:/etc/gitlab/ssl

3. /etc/gitlab/gitlab.rbにマウントしているgitlab.rbファイルに下記の行を追記

external_url 'http://registry.gitlab.example.com/gitlab/'
registry_external_url 'https://registry.gitlab.example.com:4567'
registry_nginx['ssl_certificate'] = /etc/gitlab/ssl/registry.gitlab.example.com.crt
registry_nginx['ssl_certificate_key'] = /etc/gitlab/ssl/registry.gitlab.example.com.key

4. /etc/gitlab/gitlab.rbにマウントしているgitlab.rbファイルの以下の行を変更

【BEFORE】

external_url 'http://127.0.0.1/gitlab/'

【AFTER】

external_url 'http://registry.gitlab.example.com/gitlab/'

ローカル(GitLabコンテナが動くマシン)からし
コンテナレジストリにアクセスしない場合は
変えなくても動作します。
ほかのマシンからdocker loginやってみたときに、
どうやら、external_urlにリダイレクト?されるようで、
docker loginたたいたマシンの
127.0.0.1を見に行くようで、
ホスト名に変えないと失敗してしまいます。

5. コンテナレジストリのportををdocker-compose.ymlに追記します。

ports:
  - 4567:4567

クライアント側手順

1. hostsに追記

DNSを運用している場合は、DNSにレコード追加だと思います。
DNSは使っていないので、hostsで名前解決させました。

下記の1行を追記します。

<GitLabコンテナをホスト敷いているマシンのIPアドレス>    registry.gitlab.example.com

2. 証明書(registry.gitlab.example.com.crt)をOSに認識させる

証明書を/usr/share/pki/ca-trust-source/anchors配下に配置し、
下記のコマンドを実行

# update-ca-trust
# systemctl restart docker

動作確認

クライアントから、ログインしてみましょう!

# docker login registry.gitlab.example.com:4567
Username: <GitLabに登録してあるユーザ>
Password: <パスワード>

Login Succeed

pullとかpushとか、いろいろできるようになってます。
GitLabのプロジェクトページ左側のメニューに
Registryが追加されています。

まとめ

けっこう回り道しました。。
トラブルシュート章を書きたかったのですが、
何を試してどうなったか、
情報が整理できていないので、
また機会があれば。。

参考

https://docs.gitlab.com/ee/administration/packages/container_registry.html

Gitlab × Docker × Container Registry の有効化手順のメモ - きなこもち.net