Docker for Windows(beta)に関するメモ

# 概要
Docker for Windows (beta)のセットアップや、基本的な使い方に関するメモ書き。現時点では機能評価用であり、今すぐ既存の Docker Toolbox に置き換わるものではない。なお、内容はDocker for Windows に興味を持っている方向け。

## Docker for Windows とは？

3月末に Docker プロジェクトから [Docker for Mac と Windows が発表](https://blog.docker.com/2016/03/docker-for-mac-windows-beta/) された。現時点では目下開発中であり [登録者](https://beta.docker.com/) 向けのプライベート・ベータの位置付け。

Mac 版と Windows 版では別々に開発が進んでおり、内部実装も異なる（Mac は xhyve を使うのに対して、Win では Hyper-V / Win10 が前提）。現時点では Mac 版のほうが機能が先行しており、それを Win 版が追っている状況。Blog の投稿によると、将来的には Win 版の機能も追いつく模様。 

## セットアップ方法

### 動作条件

Win 版は Hyper-V を使うため、Windows 10 Education 以上が動作する環境が必須。

### 事前申請

Private Beta 扱いのため、オンライン上（ https://beta.docker.com/ ）でサインアップが必要。暫く待つと「Docker Private Beta」という件名でメールが届く。メールには、以下の情報が記載。

* バイナリのダウンロード先
* invitation code（インストール時に必要になるトークン）

ダウンロード先から `Docker.msi` をダウンロードする。

### セットアップ手順

ダウンロードした `Docker.msi` をクリックすると、インストーラが起動する。まずライセンスを確認・同意後、トークンの入力が必要になる。ここで先ほどのメールに届いた Invitation Code を入力する。

![スクリーンショット 2016-04-09 18.00.21.png](https://qiita-image-store.s3.amazonaws.com/0/13002/fba5d911-a755-3653-5453-390cda6027e5.png)


#### Hyper-V の有効化

`コントロールパネル` -> `プログラムと機能` -> `Windows の機能の有効化または無効化` で開いたダイアログの `Hyper-V` にチェックを入れて `OK` を押す。

## 使い方

インストールすると、タスクトレイ上に鯨マークのアイコンが常駐する。設定変更等やログ設定は、このアイコンを右クリックして各種メニューを表示する。右クリックから `Settings...` を選ぶと、基本設定が表示される。特に、デフォルトでは Windows ログイン時に毎回自動起動してしまうため、常時使わないのであれば `Automatically start Docker when you log in` は外したほうが無難。

![スクリーンショット 2016-04-09 19.06.05.png](https://qiita-image-store.s3.amazonaws.com/0/13002/811ad609-3c12-b53f-3229-3c5db3d20ec4.png)


インストール直後、あるいはデスクトップ上に Docker アイコンができてるので、これをクリックすると自動的に Hyper-V 上に仮想マシンを作成する。また、Docker クライアントは自動的にこの仮想マシン上の Docker エンジンに対してアクセスできるようになる。

docker クライアントからの操作は通常、PowerShell または Cygwin 上から操作可能。 `docker version` コマンドを実行すると、クライアントとサーバ側(Hyper-V)の情報を表示する。

```
PS C:\Users\zembutsu> docker version
Client:
 Version:      1.11.0-rc3
 API version:  1.23
 Go version:   go1.5.3
 Git commit:   eabf97a
 Built:        Fri Apr  1 23:33:49 2016
 OS/Arch:      windows/amd64

Server:
 Version:      1.11.0-rc3
 API version:  1.23
 Go version:   go1.5.3
 Git commit:   eabf97a
 Built:        Fri Apr  1 23:33:49 2016
 OS/Arch:      linux/amd64
```

あとは、通常通りコンテナの起動等が可能。たとえば Nginx コンテナを起動し、ポート 80 を開くには、次のように実行。

```
PS C:\Users\zembutsu> docker run -itd -p 80:80 nginx
a7001a75a4183a4c3703a634ed3d3558377f75aa9135156c0cb1ff008353d53b
PS C:\Users\zembutsu> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS
               NAMES
a7001a75a418        nginx               "nginx -g 'daemon off"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/
tcp, 443/tcp   elated_newton
```

この時 `-p [ホスト側:コンテナ側]` でポートをマッピングしていると、Docker 環境を `http://docker/` として名前解決できるようになる。ブラウザ上で `http://docker[:port]` を開くと、Nginx の画面が表示される。

![docker-host.png](https://qiita-image-store.s3.amazonaws.com/0/13002/2f6c3ded-fcd7-0bfc-4193-f540e895ef71.png)

※ Docker for Mac の場合は `http://docker.local/` で名前解決する。

## 現状の課題

* [フォーラムに上がっている問題](https://forums.docker.com/c/docker-for-windows) のいくつかは、自分の環境でも発生している（タイムアウトやボリュームに関して）。

* 操作は PowerShell 上で行う。

* クライアントがバージョンアップするので注意
 * Docker Client (1.10.0-rc3)
 * Compose (1.7.0rc1) 

やはり、今すぐ開発に使うというよりは、評価用の扱い。普通に使うのであれば、まだ当面は Docker Machine を使った方が安全では。
 
## 参考情報

* Docker for Mac and Windows Beta: the simplest way to use Docker on your laptop
 * https://blog.docker.com/2016/03/docker-for-mac-windows-beta/
* Docker Beta: Docker for Mac and Windows 
 * https://www.youtube.com/watch?v=9CuClvKMt04