Docker for Windows (Hyper-V) を試してみたよ

# はじめに
[Docker for Mac/Windows](https://beta.docker.com/)のinvite tokenが届いたので試して見ました。

これまでPCでDockerを動かすために、[Docker Toolbox](https://www.docker.com/products/docker-toolbox)が提供されてきましたが、それに変わるものです。たぶん。
DockerのホストVMをVirtualBoxではなく、OS nativeの機能で動かしてくしてくれます。WindowsならHyper-Vですね。
トラブルの多いVirtualBoxから開放されるのです＼(^O^)／

以下、Windows版のBeta 9について記載します。

# 準備
## ダウンロード
Docker for Mac/WindowsはPrivate Beta中です。
まだ登録していない方は、[Docker for Mac/Windows](https://beta.docker.com/)から登録しましょう。
そのうちinvitationメールが届きます。
メールにダウンロードページのリンクがありますので、ダウンロードしましょう。

## インストールの前に
Docker for Windowsをインストールするわけですが、その前に、Hyper-Vを無効化している方は有効化しましょう。
[Docker Toolbox](https://www.docker.com/products/docker-toolbox)を使用している方はHyper-Vを無効にしているはずですので、有効化を忘れずに。
管理者で以下のコマンドを投入した後に、Windowsを再起動すればOKです。
```
bcdedit /set hypervisorlaunchtype auto
```

[Docker Toolbox](https://www.docker.com/products/docker-toolbox)を使用中の方は、たぶんアンインストールしなくても大丈夫だと思います。

## インストール
ダウンロードしたインストーラを実行するだけです。
Docker for Windowsの初回起動時にinvite tokenの入力を求められますので、メールに記載されているtokenを入力しましょう。

![2016-05-03.png](https://qiita-image-store.s3.amazonaws.com/0/73867/04a6c706-6cec-b60c-30f5-116aa622f6d0.png)

# GUIを試してみる
Docker for Windowsを起動すると、タスクトレイにクジラさんが常駐します。
Hyper-Vマネージャを確認すると、DockerのVMが登録されているはずです。

![2016-05-03 (5).png](https://qiita-image-store.s3.amazonaws.com/0/73867/33366a1c-5b6f-0176-16ff-fa74f5421469.png)

タスクトレイのメニューから色々試してみます。

まずは、Dashboard。
Kitematicのダウンロードページへのリンクがあるだけです。
Kitematicは手動で起動する必要があります。どこかにショートカットを作っておきましょう。
そのうちタスクトレイのメニューから起動できるようになるのかな？

![2016-05-03 (1).png](https://qiita-image-store.s3.amazonaws.com/0/73867/e93d034f-70d1-2aae-6693-b7051bb0ddd3.png)

次はSettings。
共有ドライブの設定とか[Docker Toolbox](https://www.docker.com/products/docker-toolbox)からのインポートとか出来るみたいです。

![2016-05-03 (2).png](https://qiita-image-store.s3.amazonaws.com/0/73867/1ef7017d-3467-7ac3-f7b5-0707e89ef747.png)

Manage shared drivesをクリックするとこんなのが出てきます。
デフォルトでは共有されていないみたいですので、必要に応じて設定しましょう。

![2016-05-03 (3).png](https://qiita-image-store.s3.amazonaws.com/0/73867/8824f265-8336-8737-4601-bf23ed1d49f3.png)

Share Drivesウィンドウを閉じて、次はImport Toolbox default machine contentです。
Importをクリックすると、[Docker Toolbox](https://www.docker.com/products/docker-toolbox)で作成したイメージとコンテナがインポートされます。
作り直さなくて良いのは嬉しいです。

![2016-05-03 (4).png](https://qiita-image-store.s3.amazonaws.com/0/73867/0936260c-28e0-46b9-f725-b9cf2a801bde.png)

# CLIを試してみる
コマンドプロンプトを起動してDockerのCLIを試してみます。
まずはdocker psを。

```
> docker ps
An error occurred trying to connect: Get https://192.168.99.100:2376/v1.23/containers/json: dial tcp 192.168.99.100:2376: connectex: A conn
ection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because
 connected host has failed to respond.
```

・・・あれ。

(つд⊂)

・・・

( ﾟдﾟ )


コマンドが通らないのですが・・・。
Kitematicからだと、なぜかコンテナを起動できる・・・。

ここでちょっとはまっていたのですが、よく見るとなぜか192.168.99.100にアクセスしてるんですね。
192.168.99.100はVirtualBoxのDockerホストVMのアドレスです。

はい、どう見ても環境変数が悪さしてます。
環境変数DOCKER_XXXをすべて削除してリトライ。

```
> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

```

無事にコマンドが通りました＼(^O^)／
あとは、これまで通り色々するだけです。

DockerホストVMは、ホスト名docker.localでアクセスできるようです。
IPアドレスを覚えなくて良いのでちょっと楽です。

# コンテナから外部ネットワークに接続
無事にDockerを使えるようになりましたが、デフォルトではコンテナから外部のネットワークに接続することが出来ません。
外部ネットワークに接続するためには、Hyper-Vマネージャからネットワークアダプタを追加する必要があります。

Hyper-Vマネージャを起動したら、右の一覧から仮想スイッチマネージャを起動します。

![2016-05-03 (5).png](https://qiita-image-store.s3.amazonaws.com/0/73867/81831d24-7d68-3414-80a0-cef928df6204.png)

左の一覧から新しい仮想ネットワークスイッチを選択、外部を選択して仮想スイッチの作成を実行します。

![2016-05-03 (6).png](https://qiita-image-store.s3.amazonaws.com/0/73867/9606f4e7-569e-25d2-0393-1d730ffc80b1.png)

適当に名前を付けて、あとはデフォルトでも大丈夫だと思います。
NICが複数ある方は、お好きなのを選んでください。

![2016-05-03 (9).png](https://qiita-image-store.s3.amazonaws.com/0/73867/f00dd4e9-ec26-ccba-8a1f-f114cadaeef9.png)

もとのHyper-Vマネージャに戻って、仮想マシンを右クリック、設定を起動します。
左の一覧からハードウェアの追加を選択、ネットワークアダプタを追加します。

![2016-05-03 (7).png](https://qiita-image-store.s3.amazonaws.com/0/73867/0d60df3a-b10d-1e0f-db43-cb176a6a1343.png)

追加されたネットワークアダプタの仮想スイッチで、先ほど作成した外部接続の仮想ネットワークスイッチを選択します。

![2016-05-03 (8).png](https://qiita-image-store.s3.amazonaws.com/0/73867/66612ac3-613b-e988-ce4a-d4614aef30e1.png)

あとは、VMを再起動すれば外部ネットワークに接続できるようになります。

# 終わりに
VirtualBoxから解放されたおかげで、色々と捗りそうです。
あとは、Kitematicが貧弱なのでもっとリッチになってくれると嬉しいです。