2019年7月23日火曜日

Gitlab Container Registry を試してみた

概要

前回は localhost に Gitlab を立ち上げるところまでやってみました
今回は Container Registry を試してみます

環境

  • macOS 10.14.5
  • docker 18.09.2
  • Gitlab-ce 12.0.3

Gitlab Container Registry を有効にする

Gitlab 12.0.3 にはデフォルトで Registry の機能があります
ただデフォルトでは有効になっていないので有効にします

  • docker exec -it gitlab editor /etc/gitlab/gitlab.rb

これで nano が開くので以下の行をコメントアウト/追記します
もしくはマウントしているのでローカルのファイルを編集しても OK です

  • vim gitlab/config/gitlab.rb
registry_external_url 'https://gitlab.example.com:4567'
registry_nginx['ssl_certificate'] = "/var/opt/gitlab/registry/gitlab-registry.crt"
registry_nginx['ssl_certificate_key'] = "/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key"

他の紹介記事を見ると gitlab/data/gitlab-rails/etc/gitlab.yml を編集している記事を見かけますが docker 上で動作させている場合 gitlab.yml は gitlab.rb を元に自動生成される設定ファイルなので編集しても上書きされてしまいます
編集できたらコンテナを再起動しましょう

  • docker restart gitlab

もし 4567 ポートを LISTEN していない場合はコンテナを再作成しましょう

  • docker stop gitlab
  • docker run -d -h gitlab.example.com -p 443:443 -p 80:80 -p 22:22 -p 4567:4567 --name gitlab -v $(pwd)/gitlab/config:/etc/gitlab -v $(pwd)/gitlab/logs:/var/log/gitlab -v $(pwd)/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest

これでプロジェクトで Container Registry が使えます

mac と docker for mac の設定

動作確認する mac 上の docker の設定をしましょう
今回はドメインや証明書が偽物なのでそれを使えるための設定を入れます

まずは名前で解決できるように hosts ファイルを編集しましょう

  • sudo vim /etc/hosts
127.0.0.1       gitlab.example.com

そして docker for mac の Insecure Registry に追加し「Apply & Restart」しましょう

docker info で確認して Insecure Registries に含まれていれば OK です

プロジェクトに Registry を確認する

これでプロジェクトに「Registry」が追加になっています
右メニューにあるので確認しましょう

また選択するとレジストリのエンドポイントなどが確認できます

docker login

docker コマンドで実際にログインできるか確認します

  • docker login gitlab.example.com:4567

ID/PW は Gitlab にログインする root/設定したパスワードでログインしましょう

docker push

あとはタグ付けして push するだけです
今回の場合 localhost に投げているだけなので push も早いです

  • docker tag redis gitlab.example.com:4567/root/test:v1
  • docker push gitlab.example.com:4567/root/test:v1

Gitlab の UI を見てもちゃんとイメージが push されているのが確認できました

ちなみに gitlab.example.com:4567/root/test2 みたいなタグを付与して push してみましたが拒否されました
なのでタグはすべて同一である必要があります
もし別アプリなどのイメージを push したい場合はバージョンの部分を使うしかないかなと思います

  • docker tag nginx gitlab.example.com:4567/root/test:nginx
  • docker push gitlab.example.com:4567/root/test:nginx

docker pull

ついでに pull も試してみました
一旦ローカルでタグ付けしたイメージを削除してから試しましょう

  • docker rmi gitlab.example.com:4567/root/test:v1
  • docker pull gitlab.example.com:4567/root/test:v1

はまったポイント

レジストリに独自のドメインを適当に入れていたのですがそれだと 503 エラー + error authorizing context: authorization token required エラーで docker login できません
今回の構成の場合 Gitlab とコンテナレジストリは同一ホスト、同一ドメイン配下にあるので同じドメイン上で動作するようにしないとダメでした

最後に

Gitlab の Container Registry を試してみました
インストールした方法や環境に応じて設定方法が異なるので注意が必要です
docker を使っている場合は gitlab.rb を編集すれば OK です
ただレジストリ用のドメインの設定に注意しましょう
次回は CI で Container Registry を使ってみようと思います

参考サイト

0 件のコメント:

コメントを投稿