【GitLab】【Docker】GitLabにDocker Container Registryの機能をつける
はじめに
EC2上のDockerコンテナで運用しているGitLabに、
Docker Container Registryの機能をつけてみました。
GitLabのプロジェクトで
Dockerコンテナイメージを管理できるようになります。
動作確認環境
※既存の環境は基本的にIPで通信する運用
※GitLabコンテナはdocker-composeで起動
※docker-compose.ymlの公開はできませんが、下記のような感じです。
【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