Docker MachineはDockerホストをローカルコンピュータやクラウドプロバイダー上に手軽に構築するためのツールです。普通に仮想マシンを立ててaptなりyumなりでDockerをインストールしても良いのですが、Docker Machineを使うと、インスタンスの作成、破棄や環境変数の設定などを簡単に行えるのがメリットです。Vagrantみたいな感じですね。
Docker Machineにはプラットフォームに対応しています。ドライバも多いです。
OpenStackドライバがあるので、これをConoHaで動かしてみましたが、インスタンスのIP取得部分で問題があったので、修正版を作ってみました。これでConoHaでDocker遊びがしやすくなりますね!
修正点
ConoHaはIPv4、IPv6のデュアルスタック環境なのですが、Docker MachineのOpenStackドライバはこれを考慮せず、インスタンスに対してIPv6で接続しようとします。
修正版は--openstack-ip-versionと言うオプションが追加されていて、IPバージョンを選択できるようになっています。また、指定が無い場合はIPv4アドレスを優先して使うようになっています。
本家にPRを送ってあるので、いずれマージしてもらえると思います。
https://github.com/docker/machine/pull/1933
マージしてもらえました。次のリリースで入ると思います。
レビューしてくれたのはVagrantのOpenStackドライバーを書いてる方だった。
Version 0.5.0のリリースで取り込んでもらえました。
インストール
オフィシャルの通りにインストールして下さい
https://docs.docker.com/machine/
マシンの作成
認証情報の設定
ConoHaのAPIを使うための認証情報を環境変数に設定します。シェルから以下のコマンドを実行します。認証情報はConoHaコントロールパネルのAPIページにあります。
export OS_USERNAME=[APIユーザー名]
export OS_TENANT_ID=[APIテナントID]
export OS_PASSWORD=[APIパスワード]
export OS_AUTH_URL=https://identity.tyo1.conoha.io/v2.0
export OS_REGION_NAME=tyo1
Dockerホストを作成する
次にホストを作成します。OpenStackドライバには多くのオプションがありますが、とりあえずマシンを立てるなら以下のようにすればOKです。
docker-machine create \
-d openstack \
--openstack-flavor-name g-1gb \
--openstack-image-name vmi-ubuntu-14.04-amd64 \
--openstack-sec-groups "default,gncs-ipv4-all" \
test-docker-host
Creating machine...
To see how to connect Docker to this machine, run: docker-machine env test-docker-host
-d はドライバ名
--openstack-flavor-name はConoHaの場合はプラン名
--openstack-image-name はOSイメージ
をそれぞれ指定します。指定できる値は下記です。
このオプションでは、ConoHaの1GBプランにUbuntu14.04ベースのDockerホストが作成されます。裏側では、インスタンスの作成、インスタンスの起動待ち、apt-get update、dockerのインストール、が自動で行われるので少し時間がかかります。
そして、コントロールパネルを見ると、新しいインスタンスが作成されています。
Dockerホストを使う
docker-machineのenvサブコマンドを使うと、作成したホストを使うための環境変数が表示されます。
$ docker-machine env test-docker-host
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://133.130.***.***:2376"
export DOCKER_CERT_PATH="/home/hiro/.docker/machine/machines/test-docker-host"
export DOCKER_MACHINE_NAME="test-docker-host"
# Run this command to configure your shell:
# eval "$(docker-machine env test-docker-host)"
コメントにあるとおり、最終行を実行すると環境変数がセットされます。
$ eval "$(docker-machine env test-docker-host)"
docker infoコマンドでホストの情報を見てみましょう。
$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.16.0-36-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 2
Total Memory: 993.7 MiB
Name: test-docker-host
ID: 3OBJ:56EY:OMEI:E5IR:HH2V:35D7:JSQW:6MWA:PSV4:MXYV:E65F:TUMD
WARNING: No swap limit support
Labels:
provider=openstack
ConoHa上に作成されたホストの情報が表示されました。「provider=openstack」になっていますね! このあとはいつも通りdockerコマンドを使ってpullしたりrunしたりすればOKです。
Dockerホストの管理
docker-machineにはインスタンスを管理するコマンドがあります。いくつか紹介します。
start, stop, rm
それぞれ仮想マシンの起動、停止、削除です。この辺は基本ですね。
docker-machine start test-docker-host
Starting OpenStack instance... MachineId=6c294adf-8ab1-4042-8341-ae06a0771a38
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
docker-machine stop test-docker-host
Stopping OpenStack instance... MachineId=6c294adf-8ab1-4042-8341-ae06a0771a38
ssh, scp
dockerホストに直接SSHで接続したり、SCPで直接ファイルコピーできます。
$ docker-machine ssh test-docker-host
ls
マシンの一覧を表示します。今回は1つのホストを作成しましたが、docker-machineは名前を変えれば多くのホストを作成できます。
$ docker-machine ls test-docker-host
NAME ACTIVE DRIVER STATE URL SWARM
test-docker-host * openstack Running tcp://133.130.***.***:2376
upgrade
ホスト上のDockerのバージョンを更新します。これローカルからできるの便利ですわ。
$ docker-machine upgrade test-docker-host
おわりに
Docker Machineの特徴は、環境を問わずDockerホストを作成できる点です。ConoHaは値段的に個人でも手頃に使えるので、Docker遊びするにはちょうど良いのではないでしょうか。