前回の続きです。
Docker + nginx-proxyでGitLab CI環境を作ってみる(1)
http://qiita.com/ABE_TAKASHI/items/5e106b8010037eaa4c97
GitLab CI環境をdocker-composeで一気に作る
以前はGitLab CIの環境を作るとなると、GitLabとは別にGitLab Runnerという別のサービスをインストールして、UIも完全に別々になっていましたが、GitLabのバージョンが8.2になってUIが統合されました。以前より導入も楽になっています。
ただ、UIは統合されたのですが、GitLab Runnerという別のコンテナを立てる必要はまだあるので、これもnginxと同じようにdocker-composeでまとめてコンテナを管理するようにします。GitLabおよびGitLab CIのコンテナはGitLab公式が配布していますので、それを使います。任意のディレクトリ(/var/gitlab)を作成し、以下のファイルを作成します。
gitlab:
image: gitlab/gitlab-ce:latest
container_name : gitlab
hostname: gitlab.example.com
environment:
VIRTUAL_HOST : gitlab.example.com
GITLAB_OMNIBUS_CONFIG : |
external_url 'http://gitlab.example.com/'
gitlab_rails['time_zone'] = 'Asia/Tokyo'
volumes_from:
- data
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- "10080:80"
- "10022:22"
restart: always
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name : gitlab-runner
volumes_from:
- data
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
data:
image: busybox
container_name: gitlab-data
volumes:
- /var/log/gitlab
- /var/opt/gitlab
- /etc/gitlab
- /etc/gitlab-runner
※2016年6月1日 上記のyaml一部修正しました。
GITLAB_***という設定はどうも使えないようで、GITLAB_OMNIBUS_CONFIGでgitlab_railsの設定を追加するのが正しいようです。上記の例ではtime_zoneのみ設定してありますが、他にも設定した方がいい項目がありますので、必要に応じて追加してください。
参考
http://docs.gitlab.com/omnibus/
バックアップのことを考えて、いくつかのデータをbusyboxコンテナに外出ししています。これらをバックアップしておけば、CI環境含めてバックアップできているようでした。
busyboxを使ったバックアップの方法は以下が分かりやすかったです。
Dockerのbusyboxは永続コンテナと言いながらexport/saveコマンドでは持ち運びできないよ
http://qiita.com/kumechang/items/fc108b1ec4683f3765d8
とくに細かい設定なども特にないので、そのままコンテナを立ち上げてみます。
[docker-op@gitlab]$ docker-compose up -d
[docker-op@gitlab]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60900fa566ee jwilder/docker-gen:latest "/usr/local/bin/docke" 8 hours ago Up 8 hours nginx-gen
83fbebe4d069 nginx:latest "nginx -g 'daemon off" 8 hours ago Up 8 hours 0.0.0.0:80->80/tcp, 443/tcp nginx
2d698567cdc2 gitlab/gitlab-runner:latest "/entrypoint run --us" 4 days ago Up 4 days gitlab-runner
eb0043c4be92 gitlab/gitlab-ce:latest "/assets/wrapper" 4 days ago Up 4 days 443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp gitlab
aa7220a2280a busybox "sh" 4 days ago Exited (0) 4 days ago gitlab-data
すると前回立ち上げたnginx proxyと合わせて合計5つのコンテナが立ち上がっています。gitlabが立ち上がる際は、どうもコンテナ内で全力でいろんなプロセスを立ち上げてるようで、すごい負荷がかかります。AWSだとt2.microのインスタンスだと、すべて立ち上がるのに3分ぐらいかかることもあります。他のサービスと共存させている場合は負荷に対しての注意が必要です。ので、ちょっと時間をおいてからdocker-compose.ymlで設定したURL(ここではgitlab.example.com)にアクセスすると、以下の画面が表示されます。
初期アカウントとパスワードはそれぞれ root と 5iveL!fe ですので、これでログインし、パスワードを変えたり、アカウントを作ったり、プロジェクトを作ったりします。この辺はGitHubともそう変わるところはないので、戸惑いもないかと思います。忘れがちなのが、git+sshでアクセスする場合は10022ポートを使用する必要があるので、.ssh/configなどに書いておくのを忘れないようにします。
CI環境を作るにはプロジェクトごとに設定が必要ですので、この辺を次に書きたいと思います。
Docker + nginx-proxyでGitLab CI環境を作ってみる(3)
http://qiita.com/ABE_TAKASHI/items/e612d64550a316039eae