docker for windowsをインストールしてdocker-composeまで試す

# 前提

* Windows10 Pro 64bit バージョン1803

# やったこと

* docker for windowsのインストール
* docker-composeを試す

# 詳細手順

## docker for windowsのインストール

### docker IDを得る
docker IDが必要になるので、無い場合は作成する。
https://store.docker.com/

今回はアクセスしたらログイン状態になってたので不要だった。(dockerHubと同じ)



### docker for windowsのダウンロード

* 公式より入手：
https://www.docker.com/products/docker-desktop

* 丁寧な注意書き
要するに「Win10 Pro 64bitじゃない人は動かないから、その場合はDockerToolboxにしてね」らしい

> Get Docker Community Edition for Windows
> Docker for Windows is available for free.
> Requires Microsoft Windows 10 Professional or Enterprise 64-bit. For previous versions get Docker Toolbox.



### インストール実行

* 注意書き
「Linuxコンテナの代わりにWindowsコンテナを使う」後で変えられるのでデフォルトのままにした

> Use Windows containers instead of Linux containers (this can be changed after installation)

* Hyper-Vを有効にしてもらう

「Hyper-Vが必要なので、有効にして再起動する」旨のメッセージが出るのでその通りにしてもらう
「VirtualBoxは動かなくなる」とあるので、そこは承知する

> Hyper-V and Containers features are not enabled.
> Do you want to enable them for Docker to be able to work properly?
> Your computer will restart automatically.
> Note: VirtualBox will no longer work.

* 再起動

無事に`docker is running`



### インストール後の確認・プロキシ設定

* `docker search`してみたらエラーとなった。

> docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for > connection (Client.Timeout exceeded while awaiting headers).
> See 'docker run --help'.

* docker for windows のプロキシ設定で解決

![proxy.PNG](https://qiita-image-store.s3.amazonaws.com/0/145628/07cc779b-915b-1e92-aa1b-d64388ef41d9.png)

ちゃんとポート番号まで指定する
これで`docker search`なり`pull`なり`ps`なり、一通り動けるようになった



## docker-composeを試す

### docker-compose.ymlを準備する(とりあえずwordpress)

* wordpress公式からdocker-compose.ymlを貰う
https://docs.docker.com/compose/wordpress/

* 一部を変更
  * `container_name`をつけた(たぶんつけなくてもいい)
  * mysqlのvolumesをいじって、windows側からは`C:\docker\data`という場所をマウントするようにした(どこでもいい)

```ruby:docker-compose.yml
version: '2'

services:
   db:
     image: mysql:5.7
     container_name: wordpress_db
     volumes:
       - C:\docker\data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     image: wordpress:latest
     container_name: wordpress_app
     depends_on:
       - db
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_PASSWORD: wordpress

volumes:
    db_data:
```

### docker-compose up

* `docker-compose up`してみたらエラーが発生

`ERROR: for wordpress_db  Cannot create container for service db: b'Drive has not been shared'`

関連しそうなissueを見つけたので、これの通りにやってみる。
https://github.com/Cyb3rWard0g/HELK/issues/79

* 再度`docker-compose up`
![dockerCompose.PNG](https://qiita-image-store.s3.amazonaws.com/0/145628/5d69356a-44f5-3545-d629-5f133a5c85de.png)

エラーが無さそうなので、`localhost:8000`にアクセス。
![wordpress.PNG](https://qiita-image-store.s3.amazonaws.com/0/145628/0a4e68f1-4420-82df-8928-e9a6535ca465.png)

動いた！
あとはアカウント適当に作ってログインすればローカルのwordpressが使える。
ボリュームマウントしてるから、コンテナ停止して消してまた`docker-compose up`しても、アカウント含めデータは残ってる。

データはこのようになる。
わざわざwordpressってフォルダ作ったのに、dataをマウントしたのは単なるミスです。
![data.PNG](https://qiita-image-store.s3.amazonaws.com/0/145628/6705643e-8c2d-0da4-d661-166f0cf2a08e.png)


# 感想

* powerShell上でdocker-compose.ymlを編集しようとした時に、viでサッと編集に入れないので不便だった。vimを入れる方法もあると思うが、VSCodeでymlとターミナルを両方開いた方が個人的にはよかった。
* windowsからのボリュームマウントの場合も、docker-compose.ymlの書き方に特に気にすべきことは無くて簡単。