openstack
docker
Conoha
docker-machine

ConoHaでDocker Machineを使う

More than 1 year has passed since last update.

Docker MachineはDockerホストをローカルコンピュータやクラウドプロバイダー上に手軽に構築するためのツールです。普通に仮想マシンを立ててaptなりyumなりでDockerをインストールしても良いのですが、Docker Machineを使うと、インスタンスの作成、破棄や環境変数の設定などを簡単に行えるのがメリットです。Vagrantみたいな感じですね。

Docker Machine

Docker Machineにはプラットフォームに対応しています。ドライバも多いです。

https://github.com/docker/machine/tree/master/drivers

OpenStackドライバがあるので、これをConoHaで動かしてみましたが、インスタンスのIP取得部分で問題があったので、修正版を作ってみました。これでConoHaでDocker遊びがしやすくなりますね!

修正版 hironobu-s/machine


修正点

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イメージ

をそれぞれ指定します。指定できる値は下記です。

flavor-list

image-list

このオプションでは、ConoHaの1GBプランにUbuntu14.04ベースのDockerホストが作成されます。裏側では、インスタンスの作成、インスタンスの起動待ち、apt-get update、dockerのインストール、が自動で行われるので少し時間がかかります。

そして、コントロールパネルを見ると、新しいインスタンスが作成されています。

docker-machin1.png


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遊びするにはちょうど良いのではないでしょうか。