GitLab
Docker

Dockerで5分くらいでGitLabを試す

More than 3 years have passed since last update.


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にしぼっておきたい。

というわけで、目指すコンテナ構成はこんな感じ。

gitlab-design.jpg

ポイントとしては、


  • Redisコンテナ, MySQLコンテナはGitLabコンテナから --link でつなぐようにする。そのため、Redis, MySQLコンテナには --name で名前をつけておく(今回は gitlab-redis, gitlab-mysql)


    • GitLabコンテナからは、 redisio, mysqlという名前でそれぞれ見えるようにする必要がある



  • コンテナが削除されても残しておきたいデータは -v でホスト側ディレクトリをマウントする


    • GitLabコンテナ /home/git/data ... ホスト側ディレクトリ /vagrant/gitlab/git

    • MySQLコンテナ /var/lib/mysql ... ホスト側ディレクトリ /vagrant/gitlab/mysql



  • GitLabのサービスにアクセスするためのポートはとりあえずHTTPだけ試してみる


    • コンテナのポート 80 ... ホスト側ポート 10080




コンテナを起動してみる



  1. 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



  2. 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を生成するので、ちょっと待ってあげるのが無難かもしれない。




  3. 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 とかする。

gitlab.png

動きました。ロゴがかわいくないです(個人的には)ね。

あとは元ページの言っている通り、


  • username: root

  • password: 5iveL!fe

でログインできます。パスワード変更させられますので、その後は適当に。

そんなわけで、Dockerで簡単にGitLab環境が作れました。これでAPIの感じとか色々試せます。この設定でいいかどうかは色々試してみる中で。


余談

ロゴがかわいくないのが耐え難い ( こっちみんな という気持ちになる) ので、今度

http://qiita.com/takanemu/items/019e220ce22d4d7735a2 を参考にさせていただいてロゴを変えようと考え中・・・