オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

コンテナ・マイクロサービス

さわって理解する Docker 入門

第5回 Docker Machine で Windows に Dockerホストを作ろう
オージス総研
樋口 匡俊
2017年11月16日

本連載では、Docker に興味はありつつもまだ触ったことのない方向けに、実際に Docker を触って理解していただくための記事を提供します。今回は、Docker Machine というツールを用いて Windows PC 上に Dockerホストを作成する方法を紹介します。Dockerホストというのは、Docker がインストールされ利用できる状態になっている環境のことです。Dockerホストを作成する方法については、本連載の第1回で Docker for Windows や Docker Toolbox という GUIツールを紹介しましたが、今回取り上げる Docker Machine は CLIツールです。Docker Machine は、VirtualBox 等の仮想環境ツールがあれば、たった1行のコマンドを実行するだけで Dockerホストを作成してくれます。

Dockerホストが作れない!

Docker Machine をさわってみる前に、まずは Docker Machine が登場した経緯をたどってみましょう。

Docker の特徴の一つとして、アプリケーションのポータビリティを高めてくれるということがよく挙げられます。本連載の第1回でも、Docker の特徴はアプリケーションを「様々な環境にデプロイできる」ことであり、「一度、アプリケーションをDockerコンテナのイメージとして作成すれば、そのまま様々なプラットフォーム上で実行できる」と説明しました。

このポータビリティという特徴は、当然ながら Docker を利用できる環境すなわち Dockerホストがなくては成立しません。Dockerホストがあって初めて、アプリケーションに高いポータビリティをもたらすことができるのです。

しかし、Dockerホストを作成することは決して簡単なことではありません。特に Docker が登場した2013年はそうでした。例えば、Dockerホストを作成するためには OS が必要ですが、一体どのような OS を用意すればよいのでしょうか?実は Docker が登場した当初、サポートされていた OS は Ubuntu 12.04/12.10 のみでした。そのバージョンの Ubuntu 環境を持っていない場合は、新規に作成するか、既存の Ubuntu 以外の Linux にパッチをあてる等の作業が必要だったのです。

2013年11月リリースの Docker 0.7 から全ての主要な Linux ディストリビューションがサポートされるようになりましたが、Dockerホストを作成するための技術はまだそれほど発展していなかったと言えるでしょう。

Boot2Docker の登場

そうした中、2013年12月に開催された Docker社のイベントにおいて、Boot2Docker が発表されました。

Boot2Docker は、仮想環境ツールである VirtualBox 上に Dockerホストを作成するツールです。初期は Mac のみサポートされていましたが、後に Windows もサポートされるようになりました。

Boot2Docker の構成は、以下の2つに分けられます。

  1. Dockerホストを作成するベースとなる OS のイメージファイル
  2. Dockerホストを作成・管理するための CLIツール

Boot2Docker 概要

OS のイメージファイルは、Tiny Core Linux という軽量な Linux をベースにしています。Ubuntu など多目的なサーバー向けの OS と異なり、Dockerホストに必要な最低限のものしか含まれていないため、サイズは数十MBと非常に軽量です。

CLIツールのコマンド名は、init, up, down など直感的に分かりやすく、Linux の知識を特に必要としません。

このような OS とツールをセットで提供してくれるおかげで、Docker や Linux にあまり馴染みのないユーザーでも簡単・確実に軽量な Dockerホストを作成できるというわけです。

Docker Machine の登場

Boot2Docker の登場により、Dockerホストの作成は非常に簡単になりました。この Boot2Docker の後継として開発されたのが、Docker Machine です。Docker Machine は、2014年12月の DockerCon EU において発表されました。

Docker Machine は、Boot2Docker と同様に、簡単に軽量な Dockerホストを作成・管理できるツールです。 技術的にも、以下のように Boot2Docker の成果を引き継ぎ発展させたものとなっています。

  1. Dockerホストを作成するベースとなる OS のイメージファイルは、Boot2Docker 等のイメージを利用可能
  2. Dockerホストを作成・管理するための CLIツールは、Boot2Docker にならいつつ刷新
  3. 仮想環境としては、VirtualBox だけでなく Hyper-V や AWS など様々なものを利用可能

Docker Machine 概要

この中で Boot2Docker と最も大きく異なる点は、3番の仮想環境でしょう。Docker Machine はドライバーという仕組みを持っており、VirtualBoxドライバーや AWSドライバーなど、ドライバーを使い分けることで様々な仮想環境に Dockerホストを作成できるようになりました。現在では、10数種類のドライバーが予め Docker Machine に組込まれています。また、ドライバーは自作も可能で、20種類以上のサードパーティ製のドライバーが存在します。

Docker Machine のおかげで、Dockerホストの作成は更に簡単になりました。この後も Dockerホストを作成するための新たなツールが開発されていくのですが、それについては末尾のまとめで説明します。

事前準備

さて、ここからは Docker Machine の具体的な使い方について紹介していきます。概要は以下のとおりです。

  • 事前準備
  • Docker Machine のインストール
  • Dockerホストの作成
  • Dockerホストへのログイン
  • Dockerホストで Hello World

まずは事前準備として、Windows 7 または 10VirtualBox をインストールしてください。また、PowerShell でコマンドが実行できることを確認して下さい。

本記事を執筆するにあたり、筆者が利用した環境は以下のとおりです。

  • Windows 7 SP1 64ビット
  • VirtualBox 5.1.22
  • PowerShell 5.1

それぞれ簡単に解説します。

Windows 7

Dockerホストを作成する最新ツールとして「Docker for Windows」というツールがありますが、残念ながら Windows 10 が必要で、7 では動かすことができません。一方の Docker Machine は、Windows 7 でも 10 でも動かすことができます。Windows 10 がリリースされて2年ほど経ちましたが、いまでも Windows 7 を利用している方は少なくないでしょう。今後も Windows 7 を使い続けるのであれば、Docker Machine の使い方を習得する意義はより大きいと言えるかと思います。

VirtualBox

VirtualBox は、Docker Machine のデフォルトの仮想環境ツールです。Windows 用のインストーラーは、こちらからダウンロードできます。先ほど説明したとおり、Docker Machine は AWS 等も利用できますが、まずは Boot2Docker からの実績があり、困ったときの情報も豊富な VirtualBox を利用することをオススメします。

ちなみに Windows なのだから Hyper-V を使いたいという場合、Hyper-V と VirtualBox を同時に使うことは技術的にできませんのでご注意ください。

PowerShell

Windows の CLI というと、コマンドプロンプトを思い浮かべる方が多いと思いますが、今回は PowerShell を利用します。

PowerShell は、Windows 7 にも 10 にも最初からインストールされていますが、Windows 7 の場合、バージョンが古い可能性が高いです。PowerShell のバージョンは、PowerShell 上で以下のように入力すると表示されます。

PS> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14409.1012
(以下略)

PS> は入力場所を表すプロンプトです。通常は PS C:\> のようにカレントディレクトリも表示されているはずですが、本記事では省略します。

$PSVersionTable はバージョン情報が格納されている変数で、PowerShell が自動で生成します。このバージョンが 2であった場合、なるべくバージョンアップした方がよいでしょう。バージョン 2 は、今年8月に Deprecation されているからです。本記事で利用した バージョン 5.1 は、2 とは比べ物にならないほど多くの点で改良されています。バージョン 5.1 のインストーラはこちらからダウンロードできます。

初めて PowerShell を使う場合、PowerShell のバージョンが2のように古いと、スクリプトを実行する際に以下のようなエラーメッセージが出力されるかもしれません。

. : File C:\Users\Taro\test.ps1 cannot be loaded because running scripts is disabled on this system.
 For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

これは、ExecutionPolicy という設定によりスクリプトの実行が制限されていることを示すメッセージです。このような場合、以下のコマンドを実行しましょう。

PS> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy
might expose you to the security risks described in the about_Execution_Policies help topic at
https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y

Set-ExecutionPolicy とは、ExecutionPolicy を設定するコマンドです。RemoteSigned は、インターネットからダウンロードしたスクリプトは、署名されているものだけ実行できるというポリシーです。この RemoteSigned は、自身がローカルPCで作成した スクリプトであれば署名が無くても実行できます。-Scope CurrentUser は、いま利用しているユーザーにだけこのポリシーを適用するという意味です。

Docker Machine のインストール

以上の事前準備が完了したら、Docker Machine をインストールしましょう。インストールといっても簡単で、バイナリファイルをダウンロードして Path を設定するだけです。

今回利用する Docker Machine のバージョンは、v0.12.2 です。バイナリファイルは、Docker Machine の GitHub のページからダウンロードできます。Windows の 64ビット版のファイル名は「docker-machine-Windows-x86_64.exe」です。ダウンロードしたらファイル名を「docker-machine.exe」に変更し、適当な場所に置いてください。本記事では、以下の場所に置いてある前提で説明します。

C:\Users\Taro\Hiroba\docker-machine.exe

動作確認のため、PowerShell を開いて以下のコマンドを実行してみましょう。

PS> C:\Users\Taro\Hiroba\docker-machine.exe version
docker-machine.exe version 0.12.2, build 9371605

バージョン情報が出力されていますね。

次に環境変数 Path を設定しましょう。Path を設定することで、docker-machine を実行するたびに毎回 C:\Users\Taro\Hiroba\ を付ける必要がなくなります。PowerShell では、以下のコマンドで Path に値を追加できます。

PS> $env:Path += ';C:\Users\Taro\Hiroba'

Path の値を表示するためには、以下を実行します。

PS> $env:Path

$env:Path に追加した値は、PowerShell を再起動すると消えてしまいます。消えないようにするために、プロファイルに設定を追加しましょう。プロファイルは、Bash シェル等と同様の仕組みで、ファイルに設定を記述しておくと、PowerShell を起動したときにその設定が読み込まれるというものです。

プロファイルの場所は、$PROFILE という変数の値として自動的に設定されています。

PS> $PROFILE
C:\Users\Taro\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

テキストエディタ等で、$env:Path += ';C:\Users\Taro\Hiroba' と書いたファイルを作成し、上記の場所に保存して下さい。 保存したら、PowerShell を再起動し、以下のコマンドを実行して下さい。

PS> docker-machine version
docker-machine.exe version 0.12.2, build 9371605

このように長いパスを付けなくてもバージョン情報が出力されたら成功です。先ほどと異なり、docker-machine の末尾に .exe は付けていません。.exe を付けても動作しますが、以下では省略します。

これでインストールは完了です。いよいよ実際に Docker Machine を動かして、Dockerホストを作成してみましょう。

Dockerホストの作成

Docker Machine は、以下のたった1行のコマンドを実行するだけで Dockerホストを作成してくれます。

PS> docker-machine create --driver virtualbox myhost

create は Dockerホストを作成するコマンドで、myhost は Dockerホストの名前です。--driver (または -d) はドライバーを指定するオプションで、ここでは VirtualBoxドライバーが指定されています。VirtualBoxドライバーはデフォルトのドライバーですので、以下のように --driver は省略することができます。

PS> docker-machine create myhost

実行すると、以下のようなログが出力されます。

PS> docker-machine create myhost
Running pre-create checks...
(myhost) Image cache directory does not exist, creating it at C:\Users\Taro\.docker\machine\cache...
(myhost) No default Boot2Docker ISO found locally, downloading the latest release...
(myhost) Latest release for github.com/boot2docker/boot2docker is v17.09.0-ce
(myhost) Downloading C:\Users\Taro\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.09.0-ce/boot2docker.iso...

Boot2Docker のイメージファイル(boot2docker.iso)をダウンロードしていますね。ダウンロードしたファイルは保存され、次に Dockerホストを作成するときに再利用されます。

(myhost) Copying C:\Users\Taro\.docker\machine\cache\boot2docker.iso to C:\Users\Taro\.docker\machine\machines\myhost\boot2docker.iso...
(myhost) Creating VirtualBox VM...

このログは、ダウンロードした Boot2Docker のイメージファイルをもとに、VirtualBox の仮想マシンを作成していることを示しています。

(myhost) Creating SSH key...

Dockerホストに SSH接続するために必要な鍵ペアを生成しています。この他にも、公開鍵を Dockerホストの仮想ディスクに含めるなど、SSH接続に必要な設定は自動的に行われます。

Docker is up and running!

Dockerホストの中で Docker が動いています!

ここまで create コマンドを1行実行しただけです。時間にして筆者の環境では数分でした。

ほんとうに Dockerホストが作成されたかどうか確認してみましょう。

PS> docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myhost    -        virtualbox   Running   tcp://192.168.99.100:2376           v17.09.0-ce

この ls コマンドは Dockerホストの一覧を出力するコマンドです。たしかに「myhost」という Dockerホストが作成されています。状態は「Running」ですので稼働中ということです。「v17.09.0-ce」というのは利用できる Docker のバージョンです。

Dockerホストへのログイン

次に、作成した Dockerホストにログインしてみましょう。

ログインは SSH で行います。既に SSH に関する設定は自動で完了していますので、以下のように Docker Machine の ssh コマンドにホスト名を指定するだけでログインできます。

PS> docker-machine ssh myhost
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.09.0-ce, build HEAD : 06d5c35 - Wed Sep 6 23:22:43 UTC 2017
Docker version 17.09.0-ce, build afdb6d4
docker@myhost:~$

このように、Docker Machine を用いて Dockerホストを作成すると、SSH についてほとんど意識する必要はありません。

Dockerホストで Hello World

Dockerホストにログインできましたので、次は Docker の動作確認をしましょう。

Docker は既に Dockerホストにインストール済みで、すぐに動かせる状態になっています。Dockerホストにログインしたまま、以下のように hello-world コンテナを作成・起動してみましょう。

docker@myhost:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
5b0f327be733: Pull complete
Digest: sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
Status: Downloaded newer image for hello-world:latest

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

「Hello from Docker!」と表示されました!

あっという間に、本記事のタイトル「Docker Machine で Windows に Docker環境を作ろう」が終わってしまいましたね。create コマンドで Dockerホストを作成し、ssh でログインするだけで Docker を使えるようになってしまいました。

実は ssh コマンドでログインしなくても、Windows用の Docker CLI があれば Docker を利用できるのですが、その方法については次回以降の連載で紹介できればと思います。

以下では、その他の Docker Machine のコマンドや、困ったときの解決方法をいくつか紹介していきます。

Dockerホストの起動・停止

ここまで作業を進めてきた方は、Dockerホスト「myhost」にログインしたままの状態かと思います。

まずは Linux の exit コマンドを実行し、Dockerホストからログアウトしましょう。

docker@myhost:~$ exit

ログアウトしても、Dockerホストは起動したままです。status コマンドで状態を確認してみましょう。

PS> docker-machine status myhost
Running

「Running」ですので、やはり起動したままです。

stop コマンドで停止してみましょう。

PS> docker-machine stop myhost
Stopping "myhost"...
Machine "myhost" was stopped.

停止できました。

続いて、start コマンドで起動してみましょう。

PS> docker-machine start myhost
Starting "myhost"...
(myhost) Check network to re-create if needed...
(myhost) Waiting for an IP...
Machine "myhost" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

起動できました。

stop, start コマンドのかわりに restart コマンドを実行すれば、停止してから再起動してくれます。

PS> docker-machine restart myhost
Restarting "myhost"...
(以下略)

Docker ホストの削除

要らなくなった Dockerホストは、rm コマンドで削除できます。

PS> docker-machine rm myhost
About to remove myhost
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed myhost

削除されたかどうか確認したい場合は、ls コマンドで Dockerホストの一覧を出力するとよいでしょう。あるいは、VirtualBox の GUI を見てもよいでしょう。削除された Dockerホストは表示されません。

Docker ホストの設定情報

inspect コマンドを実行すると、Docker ホストの設定情報を JSON 形式で出力できます。

PS> docker-machine inspect myhost
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "192.168.99.100",
        "MachineName": "myhost",
        "SSHUser": "docker",
(以下略)

また、以下のフォルダに設定ファイルが格納されており、テキストエディタ等で開いて参照することができます。

<ユーザーのホームディレクトリ>\.docker\machine\machines\<ホスト名>\config.json

Boot2Docker のバージョンを指定する

Docker Machine は、特に何も指定しない場合、最新の Boot2Docker のイメージファイルをダウンロードして利用します。

特定のバージョンの Boot2Docker を利用したい場合は、--virtualbox-boot2docker-url にイメージファイルの URL を指定します。

PS> $url = 'https://github.com/boot2docker/boot2docker/releases/download/v17.06.0-ce/boot2docker.iso'
PS> docker-machine create --virtualbox-boot2docker-url $url myhost1706
Running pre-create checks...
(myhost1706) Boot2Docker URL was explicitly set to "https://github.com/boot2docker/boot2docker/relea
ses/download/v17.06.0-ce/boot2docker.iso" at create time, so Docker Machine cannot upgrade this
 machine to the latest version.
Creating machine...
(myhost1706) Boot2Docker URL was explicitly set to "https://github.com/boot2docker/boot2docker/relea
ses/download/v17.06.0-ce/boot2docker.iso" at create time, so Docker Machine cannot upgrade this
 machine to the latest version.
(myhost1706) Downloading C:\Users\Taro\.docker\machine\cache\boot2docker.iso from https://github.co
m/boot2docker/boot2docker/releases/download/v17.06.0-ce/boot2docker.iso...
(myhost1706) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
(myhost1706) Creating VirtualBox VM...

$url 変数に、URL が設定されています。その URL からイメージファイルをダウンロードしていることが分かるかと思います。

Dockerホストのコマンドの実行

ssh コマンドは、引数に Dockerホストのコマンドを指定して実行することができます。別途ログイン・ログアウトのコマンドを入力する必要はありません。OpenSSH 等の SSHクライアントにも同様の機能がありますね。

以下の例では、「myhost」の ls コマンドを実行して、「/home」ディレクトリの内容を表示しています。

PS> docker-machine ssh myhost ls /home
docker
dockremap
PS> 

Dockerホストにプロキシ情報を設定する

先ほどの hello-world を実行すると、以下のようなエラーが出力されることがあります。

docker@myhost:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: no such host.
See 'docker run --help'.

原因の一つとして、会社や学校の HTTPプロキシを通過できないということが考えられます。その場合は、Dockerホストにプロキシ情報を設定しましょう。

プロキシ情報は create コマンドのオプションとして設定できます。

PS> $http_proxy = 'https://myproxy.co.jp:1234'
PS> $https_proxy = 'https://myproxy.co.jp:1234'
PS> docker-machine create --engine-env HTTP_PROXY=$http_proxy --engine-env HTTPS_PROXY=$https_proxy myhost

$http_proxy$https_proxy は PowerShell の変数です。--engine-env は Docker が参照する環境変数を指定するオプションで、変数名=値 の形式で設定します。

ユーザー名とパスワードが必要な場合は、以下のように設定します。

PS> $http_proxy = 'https://user:password@myproxy.co.jp:1234'
PS> $https_proxy = 'https://user:password@myproxy.co.jp:1234'
PS> docker-machine create --engine-env HTTP_PROXY=$http_proxy --engine-env HTTPS_PROXY=$https_proxy myhost

このユーザー名とパスワードは、先ほどの inspect コマンドを使うと平文で見えてしまいますので注意して下さい。また、Docker Machine の設定ファイル (config.json) にも平文で保存されてしまいます。GitHub に改善要望が上がっていますがいまのところ対応されていません。

デフォルトのホスト名「default」

Dockerホストの名前は「default」という名前にしておくと便利です。いくつかのコマンドで、ホスト名を省略できるからです。

例えば、docker-machine start という風にホスト名を指定せずに start コマンドを実行した場合、「default」という名前の Dockerホストを起動しようとします。同様に docker-machine stop は「default」という名前の Dockerホストを停止しようとします。

ヘルプ

以上紹介した以外にも、Docker Machine は様々なコマンドやオプションを提供しています。以下のコマンドでヘルプが表示されますので、色々と試してみると良いでしょう。

PS> docker-machine
Usage: docker-machine.exe [OPTIONS] COMMAND [arg...]
(中略)
Commands:
  active                Print which machine is active
  config                Print the connection config for machine
  create                Create a machine
(以下略)
PS> docker-machine help create
Usage: docker-machine create [OPTIONS] [arg...]
(中略)
Options:

   --driver, -d "virtualbox"                                 Driver to create machine with. [$MACHINE_DRIVER]
   --engine-install-url "https://get.docker.com"             Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
   --engine-opt [--engine-opt option --engine-opt option]    Specify arbitrary flags to include with the created engine in the form flag=value
(以下略)

おわりに:Docker Machine と関連ツール

本記事では、Docker Machine を用いて Windows に Dockerホストを作る方法を紹介しました。

Docker Machine 以外にも、Docker社はさまざまなツールを開発しています。以下少し長いですが、それらのツールの中で Docker Machine は一体どのような位置付けにあるのか見ていくことで、まとめとしたいと思います。

以下は Docker Machine の関連ツールと公開された年(括弧内)の一覧です。

  • Boot2Docker (2013)
  • Docker Compose (Fig) (2014)
  • Kitematic (2014)
  • Docker Machine (2014)
  • Docker Toolbox (2015)
  • Docker for Windows (2016)
  • InfraKit (2016)
  • LinuxKit (2017)

Docker が発表されたのは2013年の3月です。それから間もなく、Docker社の外で様々なツールが開発されていきました。Docker社は、それらのツールを積極的に自社に取り込んでいきました。

本連載の第4回で紹介した Docker Compose は、もともと Fig という名前で英国のスタートアップが開発したツールでしたが、すぐに Docker社に買収されました

Kitematic は GUI で Docker を操作するツールです。2015年にこれも Docker社に買収されました。

そうした中、2014年12月の DockerCon EU において、Docker Machine が発表されました。既に説明したとおり、Docker Machine は Boot2Docker の成果を発展させたツールです。

Docker Toolbox は、Windows や Mac でも Docker を簡単に使えるようにしようというツールです。中身は Docker Compose、Kitematic、Docker Machine などをひとまとめにしたものとなっています。いわば Docker社が取り組んできた開発ツールの集大成とも言えるようなツールだったわけです。

ここでひと区切りがあり、新しい流れが始まったかのような印象を受けます。

次の Docker for Windows は、Toolbox と同様に Windows でも Docker を簡単に使えるようにしようというツールです。しかし Docker for Windows は、Dockerホストを作成する手段として、基本的には Docker Machine を使いません。Docker Machine は、クラスタ環境を作る場合など、必要に応じて使うツールという位置づけです。仮想環境ツールも、VirtualBox のかわりに Hyper-V を採用しています。

InfraKit と LinuxKit は Dockerホストの作成・管理や、イメージファイルの作成を行うツールです。Docker Machine より高機能で、Boot2Docker より柔軟にカスタマイズできるツールと言ってもよいでしょう。そのことを端的に表しているのが、以下の Docker Machine の GitHubレポジトリのコメントです。いずれも Docker社の開発者のコメントです。

コメント1:

We have introduced more focused projects such as infrakit for multi host production deployments, linuxkit for a maintainable and extensible replacement for boot2docker

コメント2:

On the other hand, while we still want to maintain the project and make sure the people using it today can continue to do so as long as it is useful, we will not be adding any new feature to the project from here onward

つまり、Docker社としては今後は InfraKit と LinuxKit に注力していく、Docker Machine は引き続きメンテナンスしていくが新機能は追加しない、ということです。この方針は、まだ正式にアナウンスされたわけではありません。また、Docker Machine はオープンソース・ソフトウェアですので、有志がフォークして機能を追加し続けるかもしれません。しかしながら、Docker Machine がいま大きな岐路に立たされていることは間違いないでしょう。

今のところ筆者個人としては、Docker にまだ慣れていないという方は、まず Docker Machine を利用するのがよいと考えています。Docker for Windows のような GUI ツールは、良くも悪くも内部の仕組みが見え難いツールです。Docker Machine を使った経験があれば、Docker for Windows がおおよそ何をしてくれるツールなのか理解しやすく、Docker を使いこなせるようになるのも早いでしょう。

本記事で紹介したとおり、Docker Machine は手軽に使えるツールです。Docker を効率よく理解し、つかいこなせるようになるためにも、Docker Machine をさわってみるとよいでしょう。