DockerでGitLabを使ってみた(Mac OS X)

# DockerでGitLabを使ってみた
GitHubのようなプロジェクト管理システムをオンプレミスで運用できる[GitLab](https://about.gitlab.com/)を，コンテナ型仮想化ソフトウェア[Docker](https://www.docker.com/)上で動作させる手順を書いていきます．[ここ](http://qiita.com/yacchin1205/items/fa774011d72ead599eb5)を参考にさせていただきました．

## Dockerインストール(Mac OS X)
DockerはLinuxシステム上でしか動作しなかったのですが，最近OS Xにも対応しました．LinuxとOS Xでインストールの手順が異なるのですが，ここではOS Xへのインストール手順を書いていきます．
1. Docker Toolboxのダウンロード
[ここ](https://docs.docker.com/engine/installation/mac/)の手順に従い，Docker Toolboxをダウンロードしましょう．DockerはOS Xでは動作しないため，Virtual Boxを起動しその上で，Dockerを動かすっぽいです．toolboxのインストールは指示に従って進めてください．
2. QuickStart Terminal Appの起動
toolboxのインストールを終えるとAppicationフォルダ内にDocker Quickstart Terminalというアプリができています．これを起動するとDockerターミナルが自動的に立ち上がります．
![スクリーンショット 2016-01-03 0.52.33.png](https://qiita-image-store.s3.amazonaws.com/0/100455/e175e05e-c410-6e49-9a0a-7ccefe0ebdcb.png)
3. Dockerが使えるか確認
ターミナルで`docker run hello-world`と入力して，dockerがちゃんと動作するか確認しましょう． 

```
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/
```
こんな感じで表示されれば成功です．```docker run IMAGE```で指定したイメージを起動するのですが初回はイメージを所持していないので，```docker run```コマンドは指定したイメージ（ここではhello-world）をインストールし，その後，hello-worldイメージが立ち上がります．バージョンを指定しなければ最新版(latest)をダウンロードします．現在所持しているイメージは```docker images```で確認できます．

## GitLab導入
Dockerのインストールが成功したら，次はGitLabをDockerにインストールしてみましょう．[ここ](http://www.damagehead.com/docker-gitlab/)を参考にさせていただきました．
1. ymlファイルダウンロード
まずは適当に作ったgitlabtestディレクトリ内で```curl -o docker-compose.yml https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml```を実行してdocker-gitlabの設定ファイル(ymlファイル)をダウンロードします．Docker上でGitLabを起動するには，複数のコンテナ(redis, postgreSQL, gitlab)を正しい手順で起動して，それぞれがどのようにつながっているかをlinkオプションで指定する必要があるのですが面倒です(笑)，コンテナを削除するときも面倒です(笑)．そこで，ymlファイルにそれらをまとめて記述しておき，```docker-compose up -d```でまとめて起動してやりましょう．コンテナの削除も```docker-compose kill```で3つまとめて削除できます．
2. GitLab起動
```docker-compose up -d```を叩き，2-3分待ってから(GitLabの起動に少々時間が掛かる)，ブラウザでローカルホスト(0.0.0.0)の10080番ポートにアクセス```http://localhost:10080```するとGitLabの画面が表示される!と思ったのですが表示されません…どうやら，OS Xではdocker-machineという仮想環境上でGitLabを起動しているのが原因らしいです(つまり，ホストOSのローカルアドレス0.0.0.0ではダメ)．そこで```docker-machine ip default```を叩いて，デフォルトの仮想マシンのアドレスを確認します．
今度は```http://先ほど確認したdocker-machineのIPアドレス:10080```でGitLabにアクセスしてみましょう．
これでGitLabが動いているのを確認できるはずです．以下を入力して管理者としてログインしましょう．
・username: root
・password: 5iveL!fe


## Gmailを利用したメール送信設定
上述のymlファイルではSMTPの設定が無効になっています．GitLabはユーザを追加するときにメールを経由した承認が必須です．そこで，gmailを利用したメールの設定を行いましょう．[ここ](http://h-otter.hatenablog.jp/entry/2015/07/31/220511)を参考にさせていただきました．変更後のSMTPの設定は以下のようになります．

```docker-compose.yml
- SMTP_ENABLED=true
- SMTP_DOMAIN=smtp.gmail.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=あなたのメールアドレス@gmail.com
- SMTP_PASS=あなたのgmailパスワード
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login
```
まず，今存在しているコンテナたちを```docker-compose kill -d```で削除しておきましょう(そうしないとconflictが生じて新たなコンテナを起動することができません)．その後```docker-compose up -d```を叩くとSMTPを設定したGitLabが立ち上がります．GitLabの上部にあるタブをクリックして管理者画面に飛んで，試しに自分のメールアドレスでユーザ登録してみましょう．ユーザを作成すると，ymlファイルに設定したgmailアドレスからGitLabの登録確認メールが届くはずです．