Windows でコンテナ使いたい時のまとめ 2017

Dockerの登場で花咲いてきているコンテナ技術はUnix/Linuxの世界中心に目立っていました。昨今はWindows Server 2016やWindows 10の登場によりWindowsの世界でもコンテナを利用できるようになってきています。

ここではWindowsコンテナ、Linuxコンテナ両方においてWindows でコンテナを使う場合どんな選択肢があるかこの時点（2017/12/15）の状況と構成をまとめてみました。

> 本トピックは前提としてLinuxのDockerを使ったことがある方を想定しています。

![3pattern.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/1a6d4f9f-618a-6f6e-2a24-73fd4ab969e5.jpeg)


>（訂正）上記画像「2018/12/1現在」は間違いで、記事投稿時「2017/12/1現在」を指します。

大きくわけて「3通り」、今回は **Docker Toolbox** と **Docker for Windows** を中心にご紹介します。



# Docker Toolbox
これを入れることによって、**Linuxコンテナ**を使う事ができます。
実際は同梱されているVirtualBoxを使って、仮想のLinuxマシン（boot2docker）が動きその上でDocker Engineが稼働しています。

![toolbox.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/6a9d1b68-40af-5978-e7ba-e5980d59d801.jpeg)


「Docker QuickStart Terminal」によりその仮想マシンが起動し、ターミナル上からDocker Clientのコマンドでオペレーションすることができるようになります。（初回の起動はboot2dockerがプロビジョニングされるため時間がかかりますが、その後は、起動プロセスのみなので操作可能になるまでは早いです。）

*構成イメージ*
![2017-12-13 22-38-40.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/14eb865d-fd89-74d4-2ae6-9368bb933f0e.jpeg)

GUIツールの**Kitematic**もAlpha版が一緒に入るので好みで利用することができます。

# Docker for Windows 
これを入れることにより、**Windows , Linux 両方のコンテナ**を使うことが出来ます。
> Windows 10 Home ではWindowsコンテナを使えないので注意

Docker Clientのコマンドオペレーションは「コマンドプロンプト」か「PowerShell」上で行えます。
## Docker for Windowsの"Windowsのコンテナ
**Hyper-Vコンテナ（コンテナを利用するのに最適化された仮想マシン）によってWindowsコンテナを利用可能**にしています。母艦であるWindows10のカーネルとは別のカーネルでWindowsコンテナを動かせます。例えば、nanoserverのコンテナイメージからWindowsコンテナを動かせます。

![d4w.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/7dbbc32b-7caa-f296-1791-81928e60c10e.jpeg)

## Docker for Windowsの"Linuxのコンテナ"
Linuxコンテナを動かすために当然母艦のWindowsカーネルを使うことはできません。どうしているかというと現時点ではHyper-Vの仮想マシン（Hyper-Vコンテナではない点に注意）上にMobyLinuxという軽量なLinuxOSが稼働し、其の上でDocker Engineが稼働しています。

*構成イメージ*
![d4wl.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/28b051cd-b404-29f0-41f5-794f790fb5cf.jpeg)


## Docker for Windows 特徴
LinuxコンテナとWindowsコンテナ両方使えるのですが、これらは接続する稼働するDocker Engineが異なるため、オペレーションするときに、Docker Clientをスイッチさせて使うことができるようになっています。ここが非情に便利だと思います。GUIツールの**Kitematic**は一緒には入らないので個別に利用可能です。

参考：[Docker for Windowsを入れてみた](https://qiita.com/tksarah/items/f666e8035fe3cbfd759e)

#Windows Container on Windows Server
こちらでは、**Windowsコンテナ**を使うことが出来ます。<font color="red">Hyper-VコンテナとしてのLinuxコンテナはサポートされていません。</font>
Windows Server 2016においての記事が2017/12/5あがっているのでせっかくなので詳しくはそちらをご参照ください。
参考：[WindowsコンテナでWordPressを動かすまでに気づいたWindowsコンテナを使い始める時の注意点](https://qiita.com/ko-he-8/items/3bc233eca2a32abc6c63)

*構成イメージ*
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/75458/d94733f3-ccad-cb25-152b-f955376319ac.jpeg)

> Linux コンテナを動かすためには、Docker for Windowsと同様にHyper-V 仮想マシンを利用して、そこで稼働しているLinux上のDocker Engineを利用するという形

# おわりに
所感としては、現状Hyper-VコンテナのLinuxコンテナ対応が未だだったとしても、**『Windows 10 ProでのDocker for Windows』**がプログラマにしてもインフラエンジニアとしても手元の開発・評価等としてすこぶるよい環境ではと感じました。これに**Visual Studio Code**によるオペレーションが加わるとエンジニアスタイルの美しさもあり、且つ自己満足だけでなく生産性も高くなる環境が手に入ると思います。早速手に入れてみてはいかがでしょうか！？

# 2018/11/22 記

Windows Server 2019 がGAされ、アップデートされております。

* https://docs.microsoft.com/en-us/windows-server/get-started-19/whats-new-19
* https://www.publickey1.jp/blog/18/windows_server_2019.html

# 参考

* Docker Toolbox
  * https://docs.docker.com/toolbox/
* Docker for Windows
  * https://www.docker.com/docker-windows
  * https://store.docker.com/editions/community/docker-ce-desktop-windows
* Windows Container on Windows 10
  * https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/quick-start-windows-10
* Windows Container on Windows Server
  * https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/quick-start-windows-server