widnwosにdocker toolboxをインストールする

windowsのクライアント環境で、Docker Toolboxを利用して、docker環境を作成したときのメモです。

環境情報

  • Windows 10 Pro
  • Docker Toolbox 18.03.0

Docker Toolbox vs Docker for Windows

WindowsでDocker環境を作成するものに、 Docker ToolboxDocker for Windows の2つがあります。Docker for WindowsDocker Toolbox の後継にあたり、動作可能環境であれば(Win10 Proとか)、 Docker for Windows を使うべきと公式では謳っています。

ただ、 Docker ToolboxDocker for Windows には明確な違いがあり、それは、 Docker ToolboxVirtualBox を利用すること、 Docker for WindowsHyper-V を利用することになります。Dockerとはそもそも、ホストOS上のLinuxカーネルを仮想環境であるコンテナにて共有する技術であるので、そのホストOSにあたるLinuxの環境が必要となる訳です。候補となる2つのツールでは、そのLinux環境を、Virtualboxで用意するか、もしくはHyper-Vで用意するかに違いがあります。Windows環境では、Hyper-Vを有効にしている場合、Virtualboxを利用できなくなってしまうという問題があるので、それが困る人はDocker for Windowsを利用できません。

僕は、VargrantでVirtualboxの仮想環境を作成していたため、今回、Docker Toolboxを利用することを選びました。

Docker Toolboxのインストール

公式のマニュアルに従いインストールしていきます。

https://docs.docker.com/toolbox/toolbox_install_windows/

Hardware Virtuallization technology の確認

まず、インストール予定のPCで、Hardware Virtuallization technologyが有効となっているか確認します。BIOS見に行けば確認できるのでしょうが、公式では Speccy というツールを利用する記載があります。こいつのフリーライセンス版をインストールして、確認します。

Speccyのダウンロードサイトはこちら。

https://www.ccleaner.com/speccy

インストールして起動すると、こんな感じのウィンドウが表示されます。左ペインでCPUの項目を見に行くと、Virtuallization technologyの設定値を確認できます。

f:id:goodbyegangster:20180909200935p:plain

Docker toolboxの、その他インストール条件はこちらです。

  • Windowsが64bit環境であること

Docker Toolboxのインストール

で、Docker Toolboxをインストールするため、インストールモジュールをダウンロードしてきます。ダウンロードサイトはこちらですね。

Docker Toolbox overview | Docker Documentation

EXEファイルがダウンロードされるので、こいつを実行します。ウィザードが起動されるので、画面に沿ってクリックしていけばインストールできる訳ですが、以下の点には注意です。

  • Virtualboxがインストール済の場合、Virutalboxを停止しておく
  • インストール済のVirtualboxを置き換えたくない場合、インストールモジュール選択画面で、Virtualboxのチェックを外す
  • インストール済のGit for Windowsを置き換えたくない場合、インストールモジュール選択画面で、Git for Windowsのチェックを外す

Git for Windowsは、 Boot2docker で利用されるらしいです。Boot2dockerについては、下記のSlideShareの資料で詳しく説明してくれていますが、VirtualboxにDockerホスト用Linux仮想環境を簡単につくってくれるもので、ざっくり説明するとdocker専用のVargratみたいなものらしいです。

https://www.slideshare.net/znzjp/boot2docker-upgrade

動作確認

デスクトップ上にできた Docker Quickstart Terminal のアイコンをクリックすると、処理が始まります。Boot2dockerのisoファイルをダウンロードしてきて、VirtualboxにてDockerホスト用のLinux仮想環境を作ってくれます。しばらく待っていると、以下のようなくじらさんが表示されます。

To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env default



                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com


Start interactive shell

xxxxxx@xxxxxx MINGW64 /c/Program Files/Docker Toolbox
$

Virtualboxの画面を見に行けば、新たに仮想環境が作成されていることを確認できますが、以下のように docker-machine コマンドを利用しても確認できます。

> docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.06.1-ce

docker-machineはdocker-toolsをインストールする際、自動的にインストールされるもので、以下のような役割を持ちます。

Docker Machine は仮想マシン上に Docker Engine をインストールするツールであり、 docker-machine コマンドを使ってホストを管理します。Machine を使えば、自分のローカルの MacWindows 上に Docker ホストを作れるだけでなく、あなたの会社のネットワーク上や、データセンターや、AWS や Digital Ocean のようなクラウド・プロバイダ上でも作れます。 http://docs.docker.jp/machine/overview.html

今回の作業では、Docker Quickstart Terminalにより自動的にdockerホストを作成しましたが、別途dockerホストをVirtualbox上に作成したい場合、このdocker-machineコマンドを利用して作成することになります。docker-machineコマンドは、WindowsMac環境にて、Dockerホスト環境を扱うためのコマンドを提供してくれています。

最後に、プロンプトにて docker run hello-world と入力して、正しく処理されることを確認します。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
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/engine/userguide/

以上でインストール完了です。