Windows 10 home にDocker Toolbox環境を構築する

# Windows 10 home にdocker環境を構築する
WSL2が発表された微妙なタイミングだが、まだしばらくは自宅のWindows 10 Homeには適用できないので、Docker Toolboxを導入してみる。
今更感は否めない。

## 目的
学習、テストに使用できる複数ノード環境を構築したい。ただし、お金はかけない。

## ゴール
自宅のWindows 10 Home環境で複数ノード環境をテストできる環境が構築されている。平たく言えば、学習、テスト用のDocker環境が構築されている。
![docker-goal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24660/c0c7fb5a-0b4a-fa3f-68ae-4943432f021d.png)

## Docker Toolboxの導入
### Docker Desktop for Windows を導入できない同輩向け
[本家](https://docs.docker.com/toolbox/overview/)より引用。
>Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker Desktop for Mac and Docker Desktop for Windows. We recommend updating to the newer applications, if possible.

Docker Desktop for Windows は　Windows 10 Pro以上が必要(Hyper-Vが必要という事らしい)ので、Windows 10 Homeでも使用できるDocker Toolboxを導入。 

WSL2はBuild 18917以降で使用できるとのことだが、自宅の環境は残念ながら17134。Windowsのバージョンはwinverで調べられるとの由。

``` cmd
Microsoft Windows [Version 10.0.17134.829]
(c) 2018 Microsoft Corporation. All rights reserved.

D:\code-workspace>winver
```

![winver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24660/fecc8400-5445-edfd-1a7e-9e451b393abc.png)

### Docker Toolbox のダウンロード
[本家リンク](https://docs.docker.com/toolbox/toolbox_install_windows)から[GitHubのリポジトリ](https://github.com/docker/toolbox/releases)を辿り、Binaryでダウンロード。222MB程度あるので気長に。
ダウンロードしたバージョンは、v18.09.3(2019.3.4リリース)。だいたい月に1回リリースされていたようだが、ここ4か月はリリースなし。
Docker Desktop for WSL2に注力しているのかな。

### Docker Toolbox のインストール
ダウンロードしたインストーラを実行。ほぼデフォルトだが、Git for windowsを一応再導入(full install)。
過程でVirtualBoxも導入されるのでOracleの名前でドライバを導入することになる。

Docker Toolboxには以下が含まれているとのこと。
- Docker CLI Client
- Docker Machine
- Docker compose
- Kitematic
- Docker QuickStart shell
- Oracle VM VirtualBox

大体こんな関係にある様子。

![docker-toolbox-components.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24660/dc26f976-16f8-2aad-b556-67841ce40678.png)


### Docker Toolboxの動作確認
ドキュメントに記載されているとおり、おもむろに、Docker QuickStart Shellを実行する。
が、仮想化が有効になっていないと怒られ、ここで4時間ほど潰した。。。

``` cmd
Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
```
BIOSで設定されていることを確認しようとしても、ASUSのしょぼいCPUを使用しているせいか、BIOSのAdvancedメニューが表示されず、、、と回り道をしたが、どうやらこれはDocker Toolbox側の問題らしい。

GitHubの[Issues-4271](https://github.com/docker/machine/issues/4271)でも幾つかの解決策が示されていたが、結局のところは以下のいずれかの確認という事になりそう。

1. BIOSの設定による仮想化の有効化
1. docker-machine create default --virtualbox-no-vtx-check によるVMの作成
1. Hyper-Vの停止

今回のケースでは、真ん中のvtx-checkを迂回するだけで問題は解消した。
BIOSのアップデートまでしたのに全然関係なかった... orz

ターミナルから、vtx-checkを迂回してdocker-machine create default.

``` cmd
C:\home\softwares>docker-machine create default --virtualbox-no-vtx-check
Running pre-create checks...
(default) Image cache directory does not exist, creating it at C:\Users\xxx\.docker\machine\cache...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v18.09.7
(default) Downloading C:\Users\xxx\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.09.7/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying C:\Users\xxx\.docker\machine\cache\boot2docker.iso to C:\Users\xxx\.docker\machine\machines\default\boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #2"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
```

何度かUACが上がってくるが、OK、OKと寛容な対応。
再度おもむろにDocker QuickStart Terminalを実行すると、、、上がった！
![hello-docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24660/8ca5a0b3-d052-98d1-8844-b8ef1b88c0b3.png)

AAのクジラかわいい。ちなみに、AAを使うのあまり好きではない。
ドキュメントに忠実に、Hello docker

```
kazunori@Gaudi2 MINGW64 /c/Program Files/Docker Toolbox
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

今日はここまで。