GitLab をインストールしよう! (Docker Image)

# GitLab CE をインストールしよう! (Docker Image 編)
[GitLab Advent Calendar 2016](http://qiita.com/advent-calendar/2016/gitlab) ももう 11 日目ですね。

[四日目](http://qiita.com/masakura/items/0a0f00dfdddc8ce27f29)は omnibus package を使って GitLab をインストールしました。今回は、公式 Docker Image を使って Docker Engine にインストールする方法を紹介します。

GitLab CE/EE は公式で omnibus package をインストール済みの [Docker Image](https://hub.docker.com/r/gitlab/gitlab-ce/) が提供されており、とても簡単にセットアップができます。

さらに! [Docker for Mac](https://docs.docker.com/docker-for-mac/) や [Docker for Windows](https://docs.docker.com/docker-for-windows/) を使えば、Mac や Windows でも GitLab CE を動かすことができます!


## インストールの前に
[Install Docker Engine](https://docs.docker.com/engine/installation/) を参考に Docker Engine をセットアップしてください。

また、Docker Compose を使ってインストールする場合は、合わせて [Install Docker Compose](https://docs.docker.com/compose/install/) を参考にセットアップしてください。


## インストール
### GitLab CE のインストール
インストール方法は [GitLab Docker images](https://docs.gitlab.com/omnibus/docker/) にまとまっています。

ですが、そのままインストールしようとしても、ほとんどの場合ローカルのウェブサーバーや SSHD とポート番号がバッティングしてしまいます。

私の場合は、GitLab CE のインストールのたびに新しい [Docker Machine](https://docs.docker.com/machine/) を用意するようにしています。それでも SSH のポートはバッティングするのですが、テスト用のインストールということで諦めています。

```text
$ docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
```

しばらくセットアップが行われますので、お茶でも飲んで数分ほど待ちましょう!

この後は http://192.168.42.xxx にアクセスしてください。ローカルの Docker Engine を使っている場合は http://localhost でアクセスできると思います。

その後の操作は omnibus package と同様です。

設定を変更する場合は、以下のコマンドを実行します。

```text
$ docker exec -it gitlab vim /etc/gitlab/gitlab.rb
```

設定を反映して再起動するには、以下のコマンドを実行します。

```text
$ docker exec -it gitlab gitlab-ctl reconfigure
```

`docker exec` を使う必要があること以外は omnibus packages の設定方法と何ら変わりません。


### GitLab Mattermost/Container Registry のインストール
[前回](http://qiita.com/masakura/items/0a0f00dfdddc8ce27f29) と同じように GitLab Mattermost/Container Registry もインストールしてみましょう!

```
$ docker exec -it gitlab bash -c "echo mattermost_external_url \'http://mattermost.example.com\' >> /etc/gitlab/gitlab.rb"
$ docker exec -it gitlab bash -c "echo registry_external_url \'http://registry.example.com\' >> /etc/gitlab/gitlab.rb"
$ docker exec -it gitlab gitlab-ctl reconfigure
```

`/etc/hosts` ファイルに名前を登録します。(ローカルの Docker Engine の場合は、IP Address に 127.0.2.1 を使えばいいと思います)

```
192.168.42.xxx gitlab.example.com mattermost.example.com registry.example.com
```

これで、http://mattermost.example.com や http://registry.example.com でアクセスできるようになります!

使った環境を捨てるには、`docker rm` コマンドを使います。

```text
$ docker rm --force gitlab
```


### Docker Compose を使ってインストールする
[Docker Compose](https://docs.docker.com/compose/) を使うと、こういった設定を YAML ファイルに書いておいて、毎回同じように GitLab CE の Docker Container を起動できるので非常に便利です。

社内の GitLab CE の管理者をされている方は、テスト用に何度も GitLab CE のインストールをすると思います。すごく役に立ちます。

`gitlab.rb` ファイルの代わりに環境変数 `GITLAB_OMNIBUS_CONFIG` に書くことができます。Docker Compose でインストールする場合はこちらのほうがいいと思います。

私はこういう `docker-compose.yml` を用意しておいて...

```yml
version: '2'

services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.$DOMAIN'
        mattermost_external_url 'http://mattermost.$DOMAIN'
        registry_external_url 'http://registry.$DOMAIN'
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - '/srv/$DOMAIN/config:/etc/gitlab'
      - '/srv/$DOMAIN/logs:/var/log/gitlab'
      - '/srv/$DOMAIN/data:/var/opt/gitlab'
```

Docker Compose を使って起動します。

```text
$ docker-compose pull
$ DOMAIN=example.com docker-compose up -d
```

またお茶でも飲んで、アクセスできるまで待ちましょう。

ちょっと残念なのですが、そのままでは GitLab Mattermost がうまく使えず... `gitlab-ctl reconfigure` は実行しなければいけないようです。

```text
$ docker-compose exec gitlab gitlab-ctl reconfigure
```

これで GitLab Mattermost まで使えるようになりました!


## 最後に
[GitLab Docker Image](https://hub.docker.com/r/gitlab/gitlab-ce/) を使うと、omnibus package でのインストールより手軽にインストールできます。

[Docker Machine](https://docs.docker.com/machine/) と [Docker Compose](https://docs.docker.com/compose/) を組み合わせると、GitLab CE をたくさん起動できます。

私は、以前は GitLab CE をインストールするたびに Ubuntu の仮想化環境を用意していましたが、最近はこの方法に切り替えました。手軽にインストールできて、手軽に破棄できるので非常に便利です。