Windows10にDocker ComposeでGitlabを導入

#事前準備
[Windows10にDocker ComposeでJenkinsを導入](https://qiita.com/peanuts2013/items/b313ab6d3c5d4b516e0a) の続きとなります。

#作業ディレクトリに移動
Windows PowerShellを管理者権限にて起動※する。
[Windows10にDocker ComposeでJenkinsを導入](https://qiita.com/peanuts2013/items/b313ab6d3c5d4b516e0a) を参照

```powershell
PS C:\WINDOWS\system32> cd C:\docker\my_prot01\
PS C:\docker\my_prot01>
```
#docker-compose.ymlを編集【成功編】
(2021/07/03 追記)
GitLabログイン画面までいけたので安心していたら、rootユーザでログインできずにどっぷりハマりました・・・。
（なぜ初回アクセス時にrootユーザのパスワード変更画面が表示されないのか分からず）

```powershell
version: '3.9'

services:

#前回の続きのため、Redmine, MySQL, Jenkins部分のコンテナ設定は割愛

  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    container_name: gitlab
    hostname: localhost
    ports:
      - '8000:80'
      - '4022:22'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['gitlab_port'] = 80
        gitlab_rails['gitlab_shell_ssh_port'] = 4022
        gitlab_rails['initial_root_password'] = "password"
        gitlab_rails['smtp_enable'] = true  ☆
        gitlab_rails['smtp_address'] = "smtp.gmail.com"  ☆
        gitlab_rails['smtp_port'] = 587  ☆

        gitlab_rails['smtp_domain'] = "smtp.gmail.com"  ☆
        gitlab_rails['smtp_authentication'] = "login"  ☆
        gitlab_rails['smtp_enable_starttls_auto'] = true  ☆
        gitlab_rails['smtp_tls'] = false  ☆
        gitlab_rails['smtp_openssl_verify_mode'] = 'peer'  ☆
        gitlab_rails['smtp_user_name'] = "root@gmail.com"  ☆
        gitlab_rails['smtp_password'] = "password"  ☆

        postgresql['shared_buffers'] = "512MB"  ☆
    volumes:
      - 'gitlab-config:/etc/gitlab'  ★
      - ../my_prot01/gitlab/logs:/var/log/gitlab
      - 'gitlab-data:/var/opt/gitlab'  ★

volumes:
  gitlab-config:
    external: true
  gitlab-data:
    external: true
```

#docker-composeコマンドを実行し、Dockerコンテナ（Gitlabのみ）をバックグラウンド起動【成功編】
- 後半のハマった事象に記載している問題①のvolume作成を先に作成しておきます。
- docker-composeコマンドにて、gitlabコンテナを生成します。

何回も失敗しているので、ログは素っ気ない感じですね。（起動時のログイメージは、最後のハマった事象以降を参照頂ければと）

```powershell
PS C:\docker\my_prot01> docker-compose up -d gitlab
Creating gitlab ... done
```

#コンテナの状態を確認【成功編】
実行直後はStateは「Up (health: starting)」となりますが、正常に起動できると「Up (healthy)」に変わります。
環境スペックによるのでしょうが、私の環境だと「Up (healdhy)」に変わるまで1～2分程度かかります。

```powershell
PS C:\docker\my_prot01> docker-compose ps
 Name                Command                  State                                              Ports
---------------------------------------------------------------------------------------------------------------------------------------------
gitlab    /assets/wrapper                  Up (healthy)   0.0.0.0:4022->22/tcp,:::4022->22/tcp, 443/tcp, 0.0.0.0:8000->80/tcp,:::8000->80/tcp
jenkins   /sbin/tini -- /usr/local/b ...   Up             50000/tcp, 0.0.0.0:3001->8080/tcp,:::3001->8080/tcp
mysql     docker-entrypoint.sh mysql ...   Up             3306/tcp, 33060/tcp
redmine   /docker-entrypoint.sh pass ...   Up             0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
```

#Gitlabにアクセス
ブラウザを起動し、 http://localhost:8000/ にアクセスする。
今回はちょっとハマりどころがあり、少し躓きましたが無事解消できてひと安心。
（と思いきや、最後の問題③が発生してどっぷりハマりました・・・）
![Gitlab_ログイン画面 for Windows.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/39feae61-a7bd-041d-9302-e9064cb4f57c.png)

#rootユーザの初回パスワード変更
私の環境では、何をどうしても表示されませんでした。

#GitLab Dashboard画面
ログイン画面では、以下入力して「Sign in」ボタンを押下。

- Username or email：root
- Password：password（docker-compose.ymlに記載したパスワード）

今度こそ、無事Dashboard画面まで遷移できたので完了。
![Gitlab_Dashboard画面 for Windows.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/a2a8fefe-9973-c7c5-b4bd-b1310bde8ac0.png)


***
以下はハマった事象を参考に残しておきたいと思います。

#docker-compose.ymlを編集【失敗編】
```powershell
version: '3.9'

services:

#前回の続きのため、Redmine, MySQL, Jenkins部分のコンテナ設定は割愛

  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    container_name: gitlab
    hostname: gitlab.example.com
    ports:
      - '8000:80'
      - '4022:22'
    environment:
      - GITLAB_HOST=localhost
      - GITLAB_PORT=80
      - GITLAB_SSH_PORT=4022
      - GITLAB_ROOT_PASSWORD=root
    volumes:
      - ../my_prot01/gitlab/config:/etc/gitlab　　　★
      - ../my_prot01/gitlab/logs:/var/log/gitlab
      - ../my_prot01/gitlab/data:/var/opt/gitlab　　★
```

#docker-composeコマンドを実行し、Dockerコンテナ（Gitlabのみ）をバックグラウンド起動【失敗編】
```powershell
PS C:\docker\my_prot01> docker-compose up -d gitlab
Docker Compose is now in the Docker CLI, try `docker compose up`

Pulling gitlab (gitlab/gitlab-ce:latest)...
latest: Pulling from gitlab/gitlab-ce
c549ccf8d472: Pull complete
41ae71c8423a: Pull complete
c5d53ba99c3d: Pull complete
069a53bf4f3e: Pull complete
025b4ff80869: Pull complete
ea5ed1ec865a: Pull complete
259bd22bd080: Pull complete
0e9c412940b1: Pull complete
Digest: sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Status: Downloaded newer image for gitlab/gitlab-ce:latest
Creating gitlab ... done
```
#コンテナの状態を確認【失敗編】
実行直後は以下のようにgitlabのSTATUSが「Up 8 seconds (health: starting)」となっているため、（health: starting）が消えるまで待ちます。
※コンテナ起動自体はうまくいったように見えますが、いつまでたっても起動しません。

```powershell
PS C:\docker\my_prot01> docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED         STATUS                            PORTS                                                                                   NAMES
e366d15a9757   gitlab/gitlab-ce:latest   "/assets/wrapper"        2 minutes ago   Up 8 seconds (health: starting)   443/tcp, 0.0.0.0:4022->22/tcp, :::4022->22/tcp, 0.0.0.0:8000->80/tcp, :::8000->80/tcp   gitlab
ccc16bd3cf6e   redmine:passenger         "/docker-entrypoint.…"   3 hours ago     Up 3 hours                        0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                               redmine
aa2c4a3d994e   jenkins/jenkins:latest    "/sbin/tini -- /usr/…"   3 hours ago     Up 3 hours                        50000/tcp, 0.0.0.0:3001->8080/tcp, :::3001->8080/tcp                                    jenkins
eba338afcbea   mysql:5.7                 "docker-entrypoint.s…"   3 hours ago     Up 3 hours                        3306/tcp, 33060/tcp                                                                     mysql
```

#問題①
※1のログを参照してみると、「docker-compose.ymlを編集【失敗編】」の記述だと★部分が影響したせいか、以下permissionsに関するエラーが発生していました。
（1分置きに大量にログが出力され続けていました・・・）

【対応内容】
① volumeを作成しておきます。

```powershell
PS C:\docker\my_prot01> docker volume create gitlab-data
gitlab-data
PS C:\docker\my_prot01> docker volume create gitlab-config
gitlab-config
PS C:\docker\my_prot01> docker volume ls
DRIVER    VOLUME NAME
local     gitlab-config
local     gitlab-data
```

② 「docker-compose.ymlを編集【成功編】」の記述に変更し、再度「docker-compose up -d gitlab」を実行。
問題解決にあたり、以下のサイトを参考にさせて頂きました。
[Docker for Windows に GitLab CE をインストールする](https://tan-y.hatenablog.com/entry/2019/02/26/003000)

```powershell
Failed asserting that mode permissions on "/var/opt/gitlab/.ssh" is 0700
---- Begin output of set -x && [ "$(stat --printf='%04a' $(readlink -f /var/opt/gitlab/.ssh) | grep -o '....$')" = '0700' ] ----
```

※1　参照したログファイル

```
../my_prot01/gitlab/logs/reconfigure/[10桁数字].log
```

#問題②
dockerのコンテナが停止（dockerコマンドを受け付けない状態）してしまう。

【対応内容】
[AWS EC2にDockerでDocker Compose（1.29.2）を導入](https://qiita.com/peanuts2013/items/2ca576e855c880518e45) の前提条件に記載していますが、GitLabの動作環境はある程度のスペックが必要となる事を思い出し、Docker Desktopの設定を変更。
（CPU、Memory、Swapをキャプションのように変更しましたが、あくまで私の環境でのご参考まで）
![Docker Desktop 設定変更画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/569e72d1-9677-5aec-3eee-6dd7be74a3ac.png)

#問題③
GitLabログイン画面は表示されるが、rootユーザでログインできない。
[AWS EC2にDocker ComposeでGitlabを導入](https://qiita.com/peanuts2013/items/ab295fe2b99967c97f26) 時には出てきた、初回rootユーザのパスワード変更が画面が表示されない・・・。

【対応内容】
[WindowsでGitLabを構築(Docker)](https://gup.monster/entry/2020/04/13/023005) を参考にさせて頂き、docker-compose.ymlを編集【成功編】の☆部分を修正。

【試行錯誤メモ】
[Windows10でDockerコンテナにGit Bashでアクセス](https://qiita.com/peanuts2013/items/3610c930bdce1a09a287) でも書きましたが、Dockerのgitlabコンテナに直接アクセスしてRailsConsoleからrootユーザ追加してもダメでしたね。
e-mailをresendしてください的なメッセージを見て、docker-compose.ymlの設定を見直した方が早いと判断して対処しました。