DockerイメージからGitLab環境を構築(GitLab&Runner)

# VM構築
下記のスペックで構築
- IPアドレス:192.168.0.105
- AlmaLinux8.7
- CPU:4Core
- MEM:8GB
- DISK:100GB

# Dockerインストール
以下の記事を参考にDockerとdocker-composeを導入

https://qiita.com/Nats72/items/660798a9146baf68e376


# Dockerで構築する
公式を参考に構築する。

https://docs.gitlab.com/ee/install/docker.html

## マウント用ディレクトリ作成
GitLabとGitLabRunner用のディレクトリ作成
```console
# mkdir /srv/gitlab
# mkdir /srv/gitlab-runner
```
## docker-compose設定ファイル作成
```console
# vi /srv/gitlab/docker-compose.yml
```
- 公式だと`gitlab-ee`になっているが、`gitlab-ce`で構築する。
- `export GITLAB_HOME=/srv/gitlab`で環境変数を使ってディレクトリ指定するようになっていたが、変数は使わずdocker-compose.ymlに直接パスを記載。
- `GITLAB_OMNIBUS_CONFIG`で設定を変更することができる。
- 22番ポートは、ホスト(VM)のsshdで使われているので、公式に記載されているポートに変更。
- コンテナレジストリとしても使いたいので、`registry_external_url`を設定
- GitLabRunnerもコンテナで立てるように設定。
```docker-compose.yml
version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        registry_external_url 'http://192.168.0.105:5000'
    ports:
      - '80:80'
      - '443:443'
      - '2224:22'
      - '5000:5000'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    shm_size: '256m'
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    restart: always
    volumes:
      - /srv/gitlab-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
```

## コンテナ作成
`docker-compose up -d`してから、`GITLAB_OMNIBUS_CONFIG`の設定をもとに構築が始まります。
すぐに立ち上がるわけではなく、コンテナが立ち上がってから構築が始まるので待ちましょう。
```console
# cd /srv/gitlab/
# docker-compose up -d
```
構築中のログは、`docker logs -f gitlab-web-1`で確認できる。

## 起動を確認する
構築中は、GitLabコンテナのSTATUSがstartingになっている。
この状態で、GitLabにブラウザ接続すると502エラーが表示されるが、まだ構築中なので待つ。
```console
# docker ps
CONTAINER ID   IMAGE                         COMMAND                   CREATED         STATUS                            PORTS                                                                                                             NAMES
1511e011b023   gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   6 seconds ago   Up 6 seconds                                                                                                                                        gitlab-gitlab-runner-1
4b52782e2ed9   gitlab/gitlab-ce:latest       "/assets/wrapper"         6 seconds ago   Up 6 seconds (health: starting)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:2224->22/tcp, :::2224->22/tcp   gitlab-web-1
```

STATUSがhealthyになったら構築完了
```console
# docker ps
CONTAINER ID   IMAGE                         COMMAND                   CREATED         STATUS                        PORTS                                                                                                             NAMES
1511e011b023   gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   3 minutes ago   Up 3 minutes                                                                                                                                    gitlab-gitlab-runner-1
4b52782e2ed9   gitlab/gitlab-ce:latest       "/assets/wrapper"         3 minutes ago   Up About a minute (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:2224->22/tcp, :::2224->22/tcp   gitlab-web-1
```

## GitLabにアクセス
構築したGitLabにアクセスしてみる。
自己署名証明書を使ってSSL化してくれた状態で構築されているようである。

https://192.168.0.105/

## GitLabにログイン
GitLabの初期ユーザー(rootユーザー)のパスワードは、以下のコマンドで確認可能。
```console
# docker exec gitlab-web-1 cat /etc/gitlab/initial_root_password 
```
複雑なパスワードになっていて使いづらいので、ログイン後に変更しておく。

# おわり
とりあえず、ここまでの手順でGitLabの構築が完了。