きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

Gitlab × Docker × Container Registry の有効化手順のメモ

この記事の目的

この記事では、
Dockerコンテナとして立っているGitlabのContainer Resistry機能を有効化して、Dockerからinsecureに接続するための方法をまとめること
を目的としています。



本題

★Gitlabの起動コマンド作成

とにもかくにも、まず、以下のコマンドを利用してGitlabのコンテナを起動します。基本的には、公式ドキュメントに書かれているものですが、少し修正を加えています。

sudo docker run --detach \
                --hostname gitlab.example.com \ ←ここ
                --publish 443:443 --publish 80:80 --publish 30022:22 --publish 5000:5000 --publish 4567:4567\ ←ここ
                --name gitlab \
                --restart always \
                --volume /srv/gitlab/config:/etc/gitlab \
                --volume /srv/gitlab/logs:/var/log/gitlab \
                --volume /srv/gitlab/data:/var/opt/gitlab \
                gitlab/gitlab-ce:latest

上記コマンド実行後、コンテナが起動したらブラウザ、もしくはCURLで接続を試みます。ログインページへアクセスすることができたら成功です。

★Container Registryの設定

Gitlabでは、初期状態のままではContainer Registoryを利用することができません。そのため、公式ドキュメントに従い、Container Registoryを有効化する必要があります。まず、/srv/gitlab/config/gitlab.rbのファイルを開きます。そこに、どこでもいいので、以下の設定を追加します。

	registry_external_url 'https://registry.gitlab.example.com:4567'

これで設定は完了です。しかし、このままGitlabを再起動すると、SSL証明書がどこにもないといってエラーが発生し、Gitlab自体が起動できなくなります。そのため、次に、SSLオレオレ証明書を作成していきます。

参考)

docs.gitlab.com


SSLのKEYの生成

オレオレ証明書は以下のように作成します。

 mkdir /srv/gitlab/config/ssl
openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout /srv/gitlab/config/ssl/registry.gitlab.example.comdocker.key \
  -x509 -days 365 -out /srv/gitlab/config/ssl/registry.gitlab.example.com.crt

途中聞かれるパラメータは以下のように設定しました。参考までに・・・


参考)
docs.docker.com


★hostsファイルの修正

ここまで、Gitlabのホスト名を「registry.gitlab.example.com」として設定してきました。しかし、DNSでこの名前を解決できるわけがありません。そのため、DNSへ問い合わせに行く前に、ローカルで名前解決しておく必要があります。ということで、/etc/hostsファイルに以下の設定を追加します。

127.0.0.1 registry.gitlab.example.com


★Gitlabの再起動と接続確認

Docker restart [container ID]を実行して、Gitlabのコンテナを再起動します。これで、Container Registryの機能を持ったGitlabが使えるようになります。
動作確認は、GitlabのContainer Registoryのページに書かれている手順に従ってやれば簡単に実行することができます。

ここで、一つDockerfileが必要となります。とりあえず実行したいというだけでしたら、以下のコマンドを使って作成することができます。

echo FROM python:2.7-slim > Dockerfile

このコマンドに続いて実行すると、簡単にDocker ImageをPushするところまで確認することができます。


★Docker Daemonファイルの設定

Dockerでは、レジストリに接続するときに、デフォルトでHttps通信をしようとします。今回は、Httpで接続をしてもらいたいので、Https対象外のホストに接続しに行くための設定をついかします。

1)/etc/docker/daemon.json
  ここにファイルがなかったら作っていいらしいです。

{
          "insecure-registries" : ["【対象外のホスト名or IPアドレス】:4567"]
}

2)systemctl restart docker.service
Dockerを再起動します。

参考)
docs.docker.com



まとめ

ローカルで実行しているGitlab on Dockerに対するpushならこの手順で大丈夫そう。
別の環境からhttpでpushさせるためには、もうひと手間いりそうですな( ゚Д゚)