Windows＋Docker(Compose)でGitlabをローカルに立ち上げた時の話

以前、アップした[Windows＋Docker＋GitLabを構築した時の話](https://qiita.com/beeeegle/items/620fad305af348b9162a)では、Push/Pullができませんでしたが、Docker-composeを使って結構楽ちんに設定ができたので、改めてそちらの手順を記載していきます。
(docker-composeについては、別でまとめて行きたいと思ってます。)

# 環境

- Windows(10, ホスト)
- Docker Desktop for Windows(20.10.8)
- git(2.29.2.windows.2)

# 前提

- Docker Desktop for Windowsインストール済
- gitインストール済
- ssh key発行済

# 参考

- [docker-composeを使ってGitLab / Runner のローカル環境](https://tsyama.hatenablog.com/entry/docker-local-gitlab-and-runner)

# 手順

### 1. docker-compose.ymlを作る
適当な作業フォルダを作成し、その中にdocker-compose.ymlを作ります。
(念のためymlはutf-8で作ってます)

```yml:docker-compose.yml
version: "3.9"
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://web:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:22'
      - '443:443'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
```

### 2. コンテナを立ち上げる

まずは、`cd`コマンドで先ほど作成したymlファイルが置いてあるフォルダへ移動します。

```shell:windows@cmd
> cd {docker-compose.ymlが格納してあるフォルダ}
```

そして、念のため`docker-compose`コマンドが有効化確認しましょう。
(確実に使用できる場合は、確認不要です。)

```shell:windows@cmd
> docker-compose -v
Docker Compose version v2.0.0
```

念願の起動の瞬間です。
バックグラウンドで実行されるので、2～3分ほど待ちましょう。

```shell:windows@cmd
> docker-compose up -d
```

### 3. アクセス

`http://localhost:8929/`もしくは、`http://{ホスト名 or プライベートIP}:8929/`でアクセスできます。
起動中だとこんな感じになります。
<img src="https://camo.qiitausercontent.com/b94053be9da442d192003b8615a98e5cfb7459f9/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313538383933372f33396363653935322d306438392d656636662d633661342d3937663632623736663835652e706e67" width=70% border=2>

しばし待って更新すると・・・
<img src="https://camo.qiitausercontent.com/0eeb82d3fbfbdf54f4fceca038651e20c53935df/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313538383933372f62323766396664302d393335392d616339302d356136652d3330336637326635663164372e706e67" width=70% border="2">

ログイン画面が表示されます！

### 4. 初期設定
初回アクセスするとrootユーザーのパスワード設定画面が表示されるという記事があったのですが、
↑のスクショの通り、どうも普通のログイン画面っぽいです。
その時は、コンソールからパスワードを設定するしかない模様。

#### DockerコンソールからCLIを開きrailsコンソールを起動する
ホスト側のコマンドプロンプトが開きっぱなしならそれを開いて、docker-compose.ymlがあるフォルダまで移動します。
そのフォルダで下記コマンドを実行し、コンテナでコマンドを実行していきます。

```shell:windows@cmd
> docker-compose exec web bash
```

rails コンソールを起動する

```shell:docker@bash
# gitlab-rails console -e production
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]
 GitLab:       14.3.2 (92acfb1b8a9) FOSS
 GitLab Shell: 13.21.1
 PostgreSQL:   12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.3.2)
```

『>』以降のコマンドを実行する
下記は、パスワードを『password』に設定した例

```shell:docker@bash
irb(main):001:0> user = User.find(1)
=> #<User id:1 @root>
irb(main):002:0> user.password = 'password'
=> "password"
irb(main):003:0> user.password_confirmation='password'
=> "password"
irb(main):004:0> user.save!
Enqueued ActionMailer::MailDeliveryJob (Job ID: 0815a361-498c-4906-a307-7129eaf9f917) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", {:args=>[#<GlobalID:0x00007fa509bbe9b8 @uri=#<URI::GID gid://gitlab/User/1>>]}
=> true
```

IDに『root』、Passwordに先ほど設定した『password』を入力してログインすると、無事ログインできます。


### 5. git cloneを試す

Windows側でSSH Keyを生成しておき、Publicの方を登録します。
↓こんな感じになっていると思いますが、今回はSSHでCloneします。
ちなみにこのままだとCloneできないので、`web`のところを`localhost`もしくは、プライベートIPにする必要があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/511bbf5f-1b2f-f2d8-2604-f67c89530e0a.png">

無事Cloneできました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/0f1824b4-f0ca-20ef-9b81-93df2fd1284a.png" width=70%>

cloneはgitコマンドを使用しました。
gitコマンドがインストールされているかは、確認のうえ実行をお願いします。
`Sourcetree`などのツールを使ってもいけます。

```shell
> git --version
git version 2.29.2.windows.2

> git clone ssh://git@localhost:2224/root/test.git
```

# あとがき
docker-composeは、この環境設定する際に初めて使ったのですが、シンプルでわかりやすく
『すげぇ・・・』って思いました。
しかしながら、ネットワーク周りはまだまだvagrantの方が吸収しやすいですね（個人の感想）

# 関連記事

- 旧記事：[Windows＋Docker＋GitLabを構築した時の話](https://qiita.com/beeeegle/items/620fad305af348b9162a)