Help us understand the problem. What is going on with this article?

ConoHaでDocker Machineを使う

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

hironobu_s
Software Engineer
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした