Windows 10 (Hyper-V) で Docker を使った Wordpress 実行環境を構築する

Windows 10 で Docker を使った Wordpress 実行環境を構築したいと思います。
Docker for Windows では、Hyper-V という仮想マシンを使用しています。
Hyper-V は Windows 10 64bit Pro以上であれば使用できます。

# 環境
Windows 10 64bit Pro
Docker for Windows

# Docker for Windows のインストール
下記サイトより Docker for Windows をダウンロードし、インストールします。

https://docs.docker.com/docker-for-windows/

Stable 版を推奨します。
Docker for Windows のインストール中に自動的に Hyper-V が有効にされるため、
特に何かをする必要はありません。途中、Windows の再起動が必要です。

# MobyLinuxVMの確認
Docker が使用する仮想マシン MobyLinuxVM が作成されていることを確認します。
コントロールパネルの管理ツールより、Hyper-V マネージャーを開きます。
Hyper-V マネージャーに MobyLinuxVM が表示され、実行中であることを確認します。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/123649/440bf859-78c8-a5a1-2586-5f85e9b45e48.png">

# Dockerのバージョン確認
コマンドプロンプトで以下を実行します。

```bat
> docker version
```

Client と Server のバージョンが表示され、Server の OS/Arch が Linux になっていることを確認します。

```bat
Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      linux/amd64
 Experimental: true
```

Linux になっていない場合は、タスクトレイに表示される Docker アイコンを右クリックし、
Switch to Linux container... を選択します。
Server の OS/Arch が Linux になっていないと、下記のエラーが出ます。

```bat
docker: image operating system "linux" cannot be used on this platform.
```

# シェアドライブの割り当て
タスクトレイに表示されるDockerアイコンを右クリックし、Setting... を選択します。

![012201.PNG](https://qiita-image-store.s3.amazonaws.com/0/123649/0bf8ed06-5098-dd3f-2ed0-988fc86e49b6.png)

Shared Drives より、Docker で使用するドライブをあらかじめ選択しておきます。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/123649/ad4e69fc-c919-7c77-fa5f-3e300741d14f.png">

# Docker Compose のインストール
下記サイトより docker-compose-Windows-x86_64.exe をダウンロードし、実行します。

https://github.com/docker/compose/releases

# Wordpress コンテナの作成
wordpress 用の適当なフォルダを作成します。

```bat
D:\Docker\my_wordpress
```

そのフォルダ配下に docker-compose.yml というファイルを作成します。
テキストエディタで以下の内容をコピーします。

```yaml:docker-compose.yml
version: '2.1'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

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

volumes:
  db_data:
```

コマンドプロンプトで以下を実行します。

```bat
> cd D:\Docker\my_wordpress
> docker-compose up -d
```

docker-compose の -d オプションはバックグラウンドで実行するという意味です。

```bat
Creating network "mywordpress_default" with the default driver
Creating volume "mywordpress_db_data" with default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
5040bd298390: Already exists
55370df68315: Pull complete
fad5195d69cc: Pull complete
a1034a5fbbfc: Pull complete
84bedc72ed3a: Pull complete
10981627b57d: Pull complete
0eb1485c660d: Pull complete
e3ee110bb981: Pull complete
01dd88d2ce4f: Pull complete
a08baf9a1c89: Pull complete
2f844a59fb03: Pull complete
Digest: sha256:79690dd87d68fd4d801e65f5479f8865d572a6c7ac073c9273713a9c633022c5
Status: Downloaded newer image for mysql:5.7
Creating mywordpress_db_1
Creating mywordpress_wordpress_1
```

# Wordpress のコンテナ確認
コマンドプロンプトで以下を実行します。

```bat
> docker ps
```

MySQL と Wordpress のコンテナが実行されていることを確認します。

```bat
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                  NAMES
beb0dee84683        wordpress:latest    "docker-entrypoint..."   Less than a second ago   Up About an hour    0.0.0.0:8000->80/tcp   mywordpress_wordpress_1
326633e3e057        mysql:5.7           "docker-entrypoint..."   Less than a second ago   Up About an hour    3306/tcp               mywordpress_db_1
```

# ブラウザから確認
以下のアドレスに移動し、Wordpress の画面が表示されればOK。

http://localhost:8000

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/123649/857c0091-8e1e-b733-9e92-d5ff42fee3ba.png">

# まとめ
Docker for Windows が昨年夏ごろ正式リリースされたばかりということもあって、
2017年1月現時点では、Windows 10、Hyper-V 上での Docker は情報収集という面において困難なのは事実です。
ですが、VirtualBox から Windows 標準の Hyper-V をネイティブサポートした Docker は
非常に軽快に動作し、Windows ユーザーにとってパフォーマンス面で魅力的なコンテナ型仮想環境です。

# [参考]
https://docs.docker.com/docker-for-windows/
https://docs.docker.com/compose/wordpress/

# [補足] Hyper-V に外部ネットワークを追加
コントロールパネルの管理ツールより、Hyper-Vマネージャーを開きます。
仮想スイッチマネージャーを選択します。
新しい仮想ネットワークスイッチから外部の仮想スイッチを作成します。名前は好きに付けてOK。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/123649/6d293d9b-0a85-999d-1050-bd7f1c3144aa.png">

Hyper-V マネージャーの MobyLinuxVM の設定を選択します。
ハードウェアの追加、ネットワークを選択し追加します。
仮想スイッチに先ほど作成した外部の仮想スイッチを選択します。
Docker のコンテナから外部ネットワークにアクセスできるようになります。

# [補足] Kitematic のインストール
Docker の GUI ツール Kitematic をインストールします。
タスクトレイに表示される Docker アイコンを右クリックし、Kitematic をダウンロードします。
下記フォルダに解凍、配置します。

```bat
C:\Program Files\Docker\Kitematic
```

タスクトレイに表示される Docker アイコンを右クリックし、Open Kitematic... で起動します。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/123649/b529a88e-541c-087d-8a40-2bd3c7e25a64.png">