Docker for Windowsでredmineを動かす

普段はMac使い。そのまた前はUbuntu。ということでWindowsはここ10年ほどご無沙汰なのですが、必要に迫られてWindows版Dockerでredmineを動かしてみました。
プラットフォームが変わっただけでたいしたことないだろうと思っていたのですが、予想以上に大変だったので得た知見を共有です。


# なにが大変なのか?

## toolboxでdockerだったころの知見などの煙幕

今WindowsでDockerを使うならDocker for Windowsが王道だと思いますが、このプロダクトが出る以前、DockerをWindowsで動作させるため先人の涙ぐましい努力がネットに刻まれています。しかし今となってはその知見が煙幕となり、あとからくるNewbieを撹乱してしまうという皮肉な結果になっています。
実際社内でハンズオンをやった時も、Dockerをインストールする具体的な方法を指定しなかったため、入れたはいいのにlinuxコンテナが動作しないなど阿鼻叫喚の状態になってしまいました。
まったくの初心者より自律的にソリューションを探せる、中、上級者の方が罠にはまりやすい印象です。


## Hyper-VとVirtualBox

Dockerに興味があるような人はVagrantも高確率で触っていると思われます。少なくとも私の周りではそうです。そのVagrantがまたまた高確率で利用しているであろうVirtualBoxと、Docker for Windowsが利用しているWindowsの仮想化技術、Hyper-Vが非常に相性がよろしくないのです。具体的にはHyper-Vが有効になっているとVirtualBoxが起動しないという。。
仮想化に慣れ親しんでいるがゆえにDockerが遠くなる、というなんという皮肉でしょうか。

とはいえ、こうして**Docker for Windowsを使う** , **VirtualBoxとの同時使用はあきらめる**ということさえわかっていれば、スムーズに行くのでは、と思います。


# Docker for Windowsをインストールしてみる

なにはともあれDocker for Windows(以下、Docker)をインストールしてみます。


- まずは以下からDockerをダウンロード。

Get started with Docker for Windows
https://docs.docker.com/docker-for-windows/

stableを利用します。
![installerdownload.png](https://qiita-image-store.s3.amazonaws.com/0/74328/6ca77a61-4a59-7221-582f-486bfacb87be.png)


インストールを淡々と進めます。
![license.png](https://qiita-image-store.s3.amazonaws.com/0/74328/eddf2f96-ac81-ee92-75f1-43ccce318344.png)


インストーラーが親切にHyper-Vを有効にしてくれます。
![hyper-v.png](https://qiita-image-store.s3.amazonaws.com/0/74328/daf755e2-cb2a-c674-1980-4a4129d0e126.png)



# hello worldしてみる
- 
インストールが終わったらちゃんとインストールされていることを確認するためのお約束を実行。
powershellを起動して

```sh
docker run hello-world
```

Hello from Docker !と表示されればOKです。
![helloworld.png](https://qiita-image-store.s3.amazonaws.com/0/74328/92cf86a8-0258-4e12-a381-b9662146ad5d.png)


OKなようです。


# redmineを起動してみる

redmineを立ち上げます。
redmineを起動するコンテナとデータを保存するためのpostgresqlコンテナが必要なので、複数のコンテナを扱うのに便利なDocker composeを使用します。


- Cドライブをシェア可能にする



dockerのデータボリューム機能を使うためにC:ドライブをシェア可能にします。
具体的にはdockerアイコンを右クリックしてセッティングを選択。
表示されたSettingsダイアログのSharedDrivesタブを選択し、 CドライブのSharedにチェックを入れます。

![share.png](https://qiita-image-store.s3.amazonaws.com/0/74328/788ddc52-65a7-3d09-5963-b090e757c350.png)



- docker-compose.ymlを作成

メモ帳などのテキストエディタでDocker composeに必要なdocker-compose.ymlを作成します。

```docker-compose.yml

db:
    image: sameersbn/postgresql
    environment:
        - DB_NAME=redmine_production
        - DB_USER=redmine
        - DB_PASS=password
    volumes:
        - /var/lib/postgresql

redmine:
    image: sameersbn/redmine
    environment:
        - REDMINE_PORT=10083
    volumes:
        - /home/redmine/data
    links:
        - db:postgresql
    ports:
        - 10083:80
```


なぜかWindowsの場合、volumesにローカルのパスを指定すると正常にpostgresqlが起動しません。

だからこんな書き方はできません。

```yml
    volumes:
        - ./postgresql:/var/lib/postgresql
```

なのでstopしたコンテナをrmしてしまうとデータが消えてしまうという悲劇に。
厳密にいえば消えていないので再マウントできるはずですが、Windows版のローカルのパスを指定できないという問題のために事実上、消えてしまうと同じ扱いかな、、と思っています。**この辺、ぜひ識者のご意見を伺いたいです。**


- redmine起動

起動します。
初回はDBのクリエイトやプラグインのインストールが行われるので結構待ちます。5分くらい？

docker-compose.ymlがあるディレクトリに移動して

```sh
docker-compose up -d
```


ブラウザでアクセスします。
http://localhost:10083


無事redmineが表示されればOKです。
![redmine.png](https://qiita-image-store.s3.amazonaws.com/0/74328/919521e2-f20c-84d0-62b0-bcf511ba9fbd.png)


- 停止

```sh
docker-compose stop
```

- 再起動

```sh
docker-compose start -d
```


Windowsでも気軽にDockerが試せる時代になりました！