2015/09/21追記
気がついたら http://www.damagehead.com/docker-gitlab/ では Docker Compose を使う方法に変わってました。これなら複数のコンテナの起動・停止を簡単に、気持ちよく記述、実行できますね・・・!
実行は以下のような感じ。
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
docker-compose up
コンテナ構成など基本的な考え方は変わってなさそうなので、自分の構成に合わせて docker-compose.yml を調整するとよさげ。
あとGitLabのロゴがだいぶスマートな感じになってる・・・!
インフラ管理のための仕掛けを自動化するのはそれなりにうまくできつつあるのですが、これらのスクリプトや設定ファイル類の管理はやっぱりそれなりに面倒なわけです。
これらのファイルをそれなりにバージョン管理しつつ、ファイルの変更によって何か別の処理をキックしたり、別のシステムからそれらのファイルを簡単に引っ張り出せるようにしたい、みたいなことを考えはじめると、ここ最近はGitLabのようなGitHubクローンが思いつきます。個人的にはロゴがかわいくなくてアレなのですけど。
で、お試しとしてDockerで動かねえかなあと探すわけですが、
http://www.damagehead.com/docker-gitlab/ に、**5秒でできる!**みたいなアオリ文句があって、ほんとに簡単に動きます。
動くのですけど、それどうなんだろうな・・・と思う部分もあったので、もうちょっと時間をかけて、5分くらいでDocker上でGitLabを動かしてみたのでそのメモ。
#5秒(※)で試す方法
※イメージのダウンロードとコンテナ起動時間を除く
http://www.damagehead.com/docker-gitlab/ とか https://github.com/sameersbn/docker-gitlab#quick-start とかで紹介されているコマンドはこんな感じ。
docker run --name='gitlab' -it --rm \
-e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
-p 10022:22 -p 10080:80 \
-v /var/run/docker.sock:/run/docker.sock \
-v $(which docker):/bin/docker \
sameersbn/gitlab:latest
これを起動すると、sameersbn/gitlabのほか、sameersbn/postgresql, sameersbn/redisコンテナができる。
これは、-v
オプションで、ホストのDockerコマンドとDockerにさわるためのUNIXソケットをコンテナ内に見せてあげていて、コンテナ内の /app/init
スクリプトで docker run
しているため。
確かに、サービス一式そろって動作確認できてやったねとなるのだけど、sameersbn/gitlabコンテナを停止しても他の2つは停止しなかったり、少しもやっとする感じはある。
#5分くらい(※)で試してみる
※イメージのダウンロードとコンテナ起動時間を(ry
https://github.com/sameersbn/docker-gitlab#configuration を見ながら、こんな感じかなー、と。
###コンテナ構成を考える
今回はPostgreSQLでなくてMySQLを使ってみる。PostgreSQLのほうを推奨ということではあるのだけど、個人的環境では他にもMySQLコンテナがいそうな雰囲気なので、できれば管理対象はMySQLにしぼっておきたい。
というわけで、目指すコンテナ構成はこんな感じ。
ポイントとしては、
- Redisコンテナ, MySQLコンテナはGitLabコンテナから
--link
でつなぐようにする。そのため、Redis, MySQLコンテナには--name
で名前をつけておく(今回はgitlab-redis
,gitlab-mysql
)- GitLabコンテナからは、
redisio
,mysql
という名前でそれぞれ見えるようにする必要がある
- GitLabコンテナからは、
- コンテナが削除されても残しておきたいデータは
-v
でホスト側ディレクトリをマウントする- GitLabコンテナ
/home/git/data
... ホスト側ディレクトリ/vagrant/gitlab/git
- MySQLコンテナ
/var/lib/mysql
... ホスト側ディレクトリ/vagrant/gitlab/mysql
- GitLabコンテナ
- GitLabのサービスにアクセスするためのポートはとりあえずHTTPだけ試してみる
- コンテナのポート
80
... ホスト側ポート10080
- コンテナのポート
###コンテナを起動してみる
-
Redisコンテナを起動する
https://github.com/sameersbn/docker-gitlab#linking-to-redis-container の説明を踏まえて、以下のようなコマンドを実行する。docker run --name gitlab-redis -d sameersbn/redis:latest
特にエラーなど報告されなければOK。念のため
gitlab-redis
という名前で起動できているか確認。docker@boot2docker:/vagrant$ docker ps XXXXXXXXXXXX sameersbn/redis:latest ... 6379/tcp gitlab-redis
-
MySQLコンテナを起動する
これも https://github.com/sameersbn/docker-gitlab#linking-to-mysql-container の説明を踏まえて、docker run --name gitlab-mysql -d -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' -v /vagrant/gitlab/mysql:/var/lib/mysql sameersbn/mysql:latest
Redisと同様に
docker ps
してgitlab-mysql
コンテナがいるか確認。また、ホストの/vagrant/gitlab/mysql
ディレクトリにMySQL関連のデータファイルっぽいファイルができていることを確認。docker@boot2docker:/vagrant$ docker ps YYYYYYYYYYYY sameersbn/mysql:latest ... 3306/tcp gitlab-mysql XXXXXXXXXXXX sameersbn/redis:latest ... 6379/tcp gitlab-redis
初回起動時はDATABASEを生成するので、ちょっと待ってあげるのが無難かもしれない。
-
GitLabコンテナを起動する
この辺 https://github.com/sameersbn/docker-gitlab#data-store を踏まえて、docker run -d -p 10080:80 -e 'GITLAB_PORT=10080' -e 'GITLAB_HOST=192.168.33.10' -v /vagrant/gitlab/git:/home/git/data --link gitlab-mysql:mysql --link gitlab-redis:redisio sameersbn/gitlab:latest
ちなみに、
-e
オプションGITLAB_HOST
環境変数には、ホストのアドレスを指定する。今回試した環境はboot2dockerでprivate-networkを設定した状態なので、上記の例では192.168.33.10
としている。 (参考: http://qiita.com/yacchin1205/items/a422e4e130ef92457390#3-1)3つコンテナができていればOK。MySQLと同じように、ホストの
/vagrant/gitlab/git
ディレクトリにいろいろファイルができる。docker@boot2docker:/vagrant$ docker ps ZZZZZZZZZZZZ sameersbn/gitlab:latest ... 22/tcp, 443/tcp, 0.0.0.0:10080->80/tcp evil_shockley YYYYYYYYYYYY sameersbn/mysql:latest ... 3306/tcp evil_shockley/mysql,gitlab-mysql XXXXXXXXXXXX sameersbn/redis:latest ... 6379/tcp evil_shockley/redisio,gitlab-redis
すぐには起動しないので、
docker logs
とかしながら様子見。docker@boot2docker:/vagrant$ docker logs ZZZZZZZZZZZZ Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... Creating SSH2 ED25519 key; this may take some time ... invoke-rc.d: policy-rc.d denied execution of restart. Setting up GitLab for firstrun. Please be patient, this could take a while...
success: nginx entered RUNNING state
とかログが確認できればOKっぽい。
###動作確認してみる
これでGitLabに必要なコンテナはすべて起動完了。gitlabのコンテナのポート 80
に対しては、ホストのポート 10080
を介することでアクセスすることができる。
動作確認は、ブラウザから http://(DockerホストのIPアドレス):10080
とかする。
動きました。ロゴがかわいくないです(個人的には)ね。
あとは元ページの言っている通り、
- username: root
- password: 5iveL!fe
でログインできます。パスワード変更させられますので、その後は適当に。
そんなわけで、Dockerで簡単にGitLab環境が作れました。これでAPIの感じとか色々試せます。この設定でいいかどうかは色々試してみる中で。
###余談
ロゴがかわいくないのが耐え難い ( こっちみんな という気持ちになる) ので、今度
http://qiita.com/takanemu/items/019e220ce22d4d7735a2 を参考にさせていただいてロゴを変えようと考え中・・・