Windows10にDocker ComposeでRedmineを導入

#目的
Windows10環境にDockerを利用してRedmine, Gitlab, Jenkinsの環境セットを
繰り返し構築できるように、実際に試してみた内容を残しておきます。

#記載範囲
下記前提条件に沿って、Docker Desktop for Windowsをインストールして
Docker Composeを利用してRedmineを導入するところまでを記載します。

試すにあたり、以下サイトを参考にさせて頂きました。

- [【入門】はじめての Docker Desktop for Windows のインストールと CentOS の仮想環境構築のセットアップ](https://qiita.com/gahoh/items/7b21377b5c9e3ffddf4a)
- [Doker-docs-ja/Docker Compose](https://docs.docker.jp/compose/toc.html)

#前提条件
 - エディション：Windows10 Pro
 - プロセッサ：Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz 2.90GHz
 - 実装RAM：16.0GB
 - システムの種類：64 ビット オペレーティング システム、x64 ベース　プロセッサ
 - Docker Desktop for Windows v20.10.6
 - docker/compose 1.29.1

#事前準備
Docker Desktop for Windows をインストールするWindowsマシンに対して、「Hyper-V」の設定を有効化しておきます。

 1. コントロールパネルを開く
 1. プログラムを選択し、プログラムと機能を開く
 1. Windowsの機能の有効化または無効化を選択
 1. 以下の「Hyper-V」のチェックボックスにチェックが無ければ、チェックを入れて「OK」ボタンを押下
 1. Windowsマシンの再起動
![Windows_Hyper-V設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/557be282-93e6-151e-84ea-5115f187ecf5.png)

#Docker Desktop for Windowsのインストール
- 以下のサイトより「Download for Windows」ボタンを押下し、インストーラをダウンロードして実行する。

[Docker Desktop for Mac and Windows | Docker](https://www.docker.com/products/docker-desktop)
![Docker Desktop Installer画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/4d85dafb-b175-0bf7-ce03-97c357870f28.png)

#Windows PowerShell（管理者権限）を起動
Windows PowerShell起動は以下のいずれかで起動できます。
どちらの場合も、別ウィンドウでPowerShellが起動されます。

 - コマンドプロンプトを起動し、以下コマンドを入力

```bash
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process PowerShell.exe -Verb runas"
```
 - スタートメニューから「ファイル名を指定して実行」にて「powershell」を入力して起動後、以下コマンドを入力

```powershell
Start-Process PowerShell.exe -Verb runas
```

#Dockerのバージョンを確認
インストールしたDockerのバージョンを確認します。

```powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\xxxx> docker version
Client:
 Cloud integration: 1.0.14
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.16.3
 Git commit:        370c289
 Built:             Fri Apr  9 22:49:36 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:44:56 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

#Docker Composeのバージョンを確認
公式サイト（日本語化）：[Doker-docs-ja/Docker Compose](https://docs.docker.jp/compose/toc.html)でも記載されていますが
Docker Desktop for Windowsには、Docker Composeはその一部に含まれてすでにインストールされています。

```powershell
PS C:\WINDOWS\system32> docker-compose --version
docker-compose version 1.29.1, build c34c88b2
```

#ディレクトリ構成
今回試したディレクトリ構成は、以下のように作成し、コンテナ破棄とともにデータが失われないように
外部マウント先（コンテナ外）として「data」ディレクトリは別に分けています。

```powershell
C:\DOCKER
└─my_prot01
        docker-compose.yml
└─data
  └─my_prot01
  └─db
```

#docker-compose.yml
[AWS EC2にDocker ComposeでRedmineを導入](https://qiita.com/peanuts2013/items/6becf7fb22d8b4251b92) の執筆時に記載したdocoker-compose.ymlの内容をWindows向けに修正しています。

```powershell
version: '3.9'

services:
  redmine:
    image: redmine:passenger
    container_name: redmine
    ports:
      - 3000:3000
    environment:
      TZ: Asia/Tokyo
      REDMINE_DB_MYSQL: mysql
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - mysql
    restart: always
    volumes:
      - ../data/my_prot01/redmine/files:/usr/src/redmine/files
      - ../data/my_prot01/redmine/redmine/log:/usr/src/redmine/log
      - ../data/my_prot01/redmine/plugins:/usr/src/redmine/plugins
      - ../data/my_prot01/redmine/redmine/public/themes:/usr/src/redmine/public/themes

  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      TZ: Asia/Tokyo
      MYSQL_ROOT_PASSWORD: devops
      MYSQL_DATABASE: redmine
      MYSQL_USER: redmine
      MYSQL_PASSWORD: redmine
    volumes:
      - ../data/db:/var/lib/mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
```

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

Creating mysql ... done
Creating redmine ... done
```
- 備忘録

上記コマンド実行時、volumesに指定したディレクトリ権限に関するダイアログが出ました。
「Share it」を選択（volumes指定分だけ表示）
![Docker Desktop up時のshareエラー画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/fc4015d7-bcac-ed42-0ecc-50ce1ddc785b.png)

#コンテナの状態を確認
```powershell
PS C:\docker\my_prot01> docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
7ebd216d48c5   redmine:passenger   "/docker-entrypoint.…"   24 minutes ago   Up 23 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   redmine
f35646564e40   mysql:5.7           "docker-entrypoint.s…"   24 minutes ago   Up 24 minutes   3306/tcp, 33060/tcp                         mysql
```

#Redmineにアクセス
ブラウザを起動し、 http://localhost:3000 にアクセスする。
以下のようにRedmine画面が表示されれば完了。
![Redmineアクセス_For Windows.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/fb713612-cd8f-bcd1-a830-5673b8214e54.png)

#Redmine初回アクセス時
1. 「ログイン」リンクを押下後、ログインIDとパスワードは"admin"を入力して「ログイン」ボタンを押下します。
1. 初回は以下パスワード変更画面に遷移するので、任意のパスワードに変更。
![Redminパスワード変更 for Windows.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32811/03472d10-6716-24f6-30d1-0265dcd8755d.png)

#次回の予定
Windows10にDocker ComposeでJenkinsを導入する記事を投稿予定。