docker-machineとそのメリット

docker-machine は仮想マシン上にDocker Engine をインストールするツールです。 docker-machineコマンドを使用することで、Dockerホストを作成・管理することが可能です。 docker-machineを使用してDockerホストを作成すると、

1
$ docker-machine env <MACHINE_NAME>

でシェル評価可能なDocker接続情報を得ることができ、

1
$ eval $(docker-machine env <MACHINE_NAME>)

とすることにより、そのセッション内ではあたかもローカル環境のDockerの様にコンテナを操作することが可能となります。

docker-machineで使用するOS

扨、通常docker-machineでDockerホストを作成すると、インストールされるOSはBoot2Docker ですが、docker-machineでは、ホスト作成時のコマンドラインオプションでisoイメージやシェルスクリプトを指定することでOSやDocker Engineのバージョンを変更することができます。

RancherOS

Boot2Dockerに類似したOSとして、RancherOS があり、rosコマンドを使用することでインストール後でもDockerのバージョンを簡単に切り替えることができます。

RancherOSは以前、仮想マシン環境のサポートとして、Vagrant 用の環境を提供していましたが、現在(2017年8月)では、すでにサポートが終了しており、docker-machineを使用するようにというアナウンスが出ています。

そこで、今回はdocker-machineを使用してRancherOSを立ちあげてみようと思います。

docker-machineでRancherOSを立ちあげる

公式ドキュメント 上に示されたコマンドをそのまま使用しても、途中でエラーが出てしまい(エラーが出ること自体は記述されていますが)、docker-machineをの大きなメリットである、docker-machine envが使用できません。

エラーを回避するためには、Rancherのリポジトリ上にあるインストールスクリプト を指定します。

1
$ docker-machine create -d virtualbox --virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso --engine-install-url https://raw.githubusercontent.com/rancher/install-docker/master/17.06.sh

インストールが完了したら、docker-machine lsコマンドで実行中のDockerホストの一覧を表示することができます。

1
2
3
$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
ros    -        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.0-ce

Docker Engineのバージョンを切り替える

せっかくRancherOSを使用しているので、Docker Engineのバージョンを切り替えてみましょう。 Docker Engineのバージョンを切り替えるにはRancherOS上でrosコマンドを使用するのでした。

RancherOSはdocker-machineで作成されたVM上で動作していますので、以下のコマンドを用いてログインします。

1
$ docker-machine ssh <RANCHEROS_VM_NAME>

Vagrantを使用したことがある方はなじみやすいかもしれません。 SSHログインできたら、以下のコマンドで使用可能なDocker Engineのリストを表示します。

1
2
3
4
5
6
7
8
9
$ sudo ros engine list
disabled docker-1.10.3
disabled docker-1.11.2
disabled docker-1.12.6
disabled docker-1.13.1
disabled docker-17.03.1-ce
disabled docker-17.04.0-ce
disabled docker-17.05.0-ce
current  docker-17.06.0-ce

disabledと表示されているものが使用可能なDockerのバージョン、currentと表示されているものが現在使用中のDockerのバージョンです。 今回は、1.12.6に変更してみましょう(Kubernetes がサポートしているバージョンです)) Dockerのバージョンを切り替えるには、以下のコマンドを使用します。

1
$ sudo ros engine switch <DOCKER_VERSION>

今回は1.12.6に変更したいため、以下の様にします。

1
$ sudo ros engine switch docker-1.12.6

実行し終わり、docker versionコマンドでバージョンが変更されたことを確認されたら、CTRL-dでログアウトし、docker-machine lsでもバージョンを見てみましょう。

1
2
3
$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
ros    -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.6

docker-machineから見えているバージョンもきちんと変更されていることがわかりました。

まとめ

docker-machineを使用することで、ローカル環境に簡単に複数のDockerホストを作成することができます。docker-machineにはドライバを選択するオプションもあり、Virtualbox 以外にもvmware fusionxhyve /hyperkit などのローカル仮想マシン環境、Amazon Web ServiceMicrosoft AzureGoogle Cloud Platform などのクラウド環境にDockerホストを構築することも可能です。