Docker + nginx-proxyでGitLab CI環境を作ってみる（2）


前回の続きです。

Docker + nginx-proxyでGitLab CI環境を作ってみる（1）
http://qiita.com/ABE_TAKASHI/items/5e106b8010037eaa4c97

# GitLab CI環境をdocker-composeで一気に作る

以前はGitLab CIの環境を作るとなると、GitLabとは別にGitLab Runnerという別のサービスをインストールして、UIも完全に別々になっていましたが、GitLabのバージョンが8.2になってUIが統合されました。以前より導入も楽になっています。

ただ、UIは統合されたのですが、GitLab Runnerという別のコンテナを立てる必要はまだあるので、これもnginxと同じようにdocker-composeでまとめてコンテナを管理するようにします。GitLabおよびGitLab CIのコンテナはGitLab公式が配布していますので、それを使います。任意のディレクトリ（/var/gitlab）を作成し、以下のファイルを作成します。

```yaml:docker-compose.yml
gitlab:
  image: gitlab/gitlab-ce:latest
  container_name : gitlab
  hostname: gitlab.example.com
  environment:
    VIRTUAL_HOST : gitlab.example.com
    GITLAB_OMNIBUS_CONFIG : |
      external_url 'http://gitlab.example.com/'
      gitlab_rails['time_zone'] = 'Asia/Tokyo'
  volumes_from:
    - data
  volumes:
    - /etc/localtime:/etc/localtime:ro
  ports:
    - "10080:80"
    - "10022:22"
  restart: always
gitlab-runner:
  image: gitlab/gitlab-runner:latest
  container_name : gitlab-runner
  volumes_from:
    - data
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
data:
  image: busybox
  container_name: gitlab-data
  volumes:
    - /var/log/gitlab
    - /var/opt/gitlab
    - /etc/gitlab
    - /etc/gitlab-runner
```
※2016年6月1日　上記のyaml一部修正しました。

GITLAB_***という設定はどうも使えないようで、GITLAB_OMNIBUS_CONFIGでgitlab_railsの設定を追加するのが正しいようです。上記の例ではtime_zoneのみ設定してありますが、他にも設定した方がいい項目がありますので、必要に応じて追加してください。

参考
http://docs.gitlab.com/omnibus/

---

バックアップのことを考えて、いくつかのデータをbusyboxコンテナに外出ししています。これらをバックアップしておけば、CI環境含めてバックアップできているようでした。

busyboxを使ったバックアップの方法は以下が分かりやすかったです。

Dockerのbusyboxは永続コンテナと言いながらexport/saveコマンドでは持ち運びできないよ
http://qiita.com/kumechang/items/fc108b1ec4683f3765d8

とくに細かい設定なども特にないので、そのままコンテナを立ち上げてみます。

```bash
[docker-op@gitlab]$ docker-compose up -d

[docker-op@gitlab]$ docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                  PORTS                                                   NAMES
60900fa566ee        jwilder/docker-gen:latest       "/usr/local/bin/docke"   8 hours ago         Up 8 hours                                                                      nginx-gen
83fbebe4d069        nginx:latest                    "nginx -g 'daemon off"   8 hours ago         Up 8 hours              0.0.0.0:80->80/tcp, 443/tcp                             nginx
2d698567cdc2        gitlab/gitlab-runner:latest     "/entrypoint run --us"   4 days ago          Up 4 days                                                                       gitlab-runner
eb0043c4be92        gitlab/gitlab-ce:latest         "/assets/wrapper"        4 days ago          Up 4 days               443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlab
aa7220a2280a        busybox                         "sh"                     4 days ago          Exited (0) 4 days ago                                                           gitlab-data
```

すると前回立ち上げたnginx proxyと合わせて合計5つのコンテナが立ち上がっています。gitlabが立ち上がる際は、どうもコンテナ内で全力でいろんなプロセスを立ち上げてるようで、すごい負荷がかかります。AWSだとt2.microのインスタンスだと、すべて立ち上がるのに3分ぐらいかかることもあります。他のサービスと共存させている場合は負荷に対しての注意が必要です。ので、ちょっと時間をおいてからdocker-compose.ymlで設定したURL（ここではgitlab.example.com）にアクセスすると、以下の画面が表示されます。

![gitlab.png](https://qiita-image-store.s3.amazonaws.com/0/104477/423453fd-9f47-7be2-b213-1ed7d638fc8c.png)

初期アカウントとパスワードはそれぞれ root と 5iveL!fe ですので、これでログインし、パスワードを変えたり、アカウントを作ったり、プロジェクトを作ったりします。この辺はGitHubともそう変わるところはないので、戸惑いもないかと思います。忘れがちなのが、git+sshでアクセスする場合は10022ポートを使用する必要があるので、.ssh/configなどに書いておくのを忘れないようにします。

CI環境を作るにはプロジェクトごとに設定が必要ですので、この辺を次に書きたいと思います。

Docker + nginx-proxyでGitLab CI環境を作ってみる（3）
http://qiita.com/ABE_TAKASHI/items/e612d64550a316039eae