Help us understand the problem. What is going on with this article?

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 を参考にさせていただいてロゴを変えようと考え中・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした