概要
2014年末の DockerCon EUで発表された公式のオーケストレーションツール Machine, Swarm, Compose のうち Machine についてのまとめ。
2015年02月26日にダウンロード可能な最初のバージョンが出た
Machine を一言で説明するならば Docker ホストを作成、管理できるツール。
Swarm, Compose については以下参照
Machine とは
Machine は開発マシン、クラウド、データセンターに Docker ホストを簡単に作成できるツール。
machine ができること
- 軽量なホストマシンマネジメントツール
- Dockerホストの作成
- Dockerホストのスタート
- Dockerホストのストップ
- Dockerホストの削除
- SSH経由でのリモートコマンドの実行やログイン
- Dockerのバージョンアップグレード
2015年02月27日現在はベータ版という扱い
インストール
OSX x86_64
GitHub リポジトリの releases から OSX x86_64 用のバイナリをダウンロードする
例: https://github.com/docker/machine/releases/download/v0.1.0/docker-machine_darwin-amd64
$ sudo mv ~/Downloads/docker-machine_darwin-amd64 /usr/bin/docker-machine
$ sudo chmod +x /usr/bin/docker-machine
$ docker-machine -v
docker-machine version 0.1.0
Linux x86_64
GitHub リポジトリの releases から Linux x86_64 用のバイナリをダウンロードする
例: https://github.com/docker/machine/releases/download/v0.1.0/docker-machine_linux-amd64
core@core-01 ~ $ wget https://github.com/docker/machine/releases/download/v0.1.0/docker-machine_linux-amd64
core@core-01 ~ $ sudo mv docker-machine_linux-amd64 /opt/bin/docker-machine
core@core-01 ~ $ sudo chmod +x /opt/bin/docker-machine
core@core-01 ~ $ docker-machine -v
docker-machine version 0.1.0
Docker Container
DockerHubに公式イメージは置かれていないようだが、Dockerfile
は存在する。が、Docker in Docker になって複雑になるのでやらないかな。
Hello World
VirtualBox
Docker Machine を使って VirtualBox に Dockerホストを立てる
DigitalOcean
Docker Machine を使って DigitalOcean に Dockerホストを立てる
EC2
Docker Machine を使って EC2 に Dockerホストを立てる
How It Works
create
コマンドでは何が行われているのか
- 作成する Docker ホストにアクセスするための SSH キーを作成 (e.g.
~/.docker/machine/machines/<MACHINE_NAME>/id_rsa
) - Docker のインストール
- リモートからTLSで通信可能なよう設定して Docker Daemon を起動
証明書とかは ~/.docker/machine/certs
以下にある
ドライバを使わずに管理ホストを追加する
エンドポイントの URL だけを渡して管理ホストを追加することもできるので、
既に構築された Docker ホストを machine 管理化に追加することができる。
$ docker-machine create --url tcp://172.17.8.101:2375 core-01
INFO[0000] "core-01" has been created and is now the active machine.
INFO[0000] To point your Docker client at it, run this in your shell: $(docker-machine env core-01)
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
core-01 none tcp://172.17.8.101:2375
dev * virtualbox Running tcp://192.168.99.100:2376
- TLS の準備は自分でやる必要がある
- ドライバなしのマシンには
docker-machine ssh
はできない
サブコマンド
active
アクティブなマシン(Dockerホスト)をセットする。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 * virtualbox Running tcp://192.168.99.100:2376
dev-02 virtualbox Running tcp://192.168.99.101:2376
# アクティブなマシンを dev-02 にセット
$ eval "$(docker-machine env dev-02)"
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
dev-02 * virtualbox Running tcp://192.168.99.101:2376
アクティブなマシンについては、いくつかのサブコマンドでマシン名の指定を省略出来る
$ docker-machine ssh
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.5.0, build master : a66bce5 - Tue Feb 10 23:31:27 UTC 2015
Docker version 1.5.0, build a8a31ef
docker@dev-02:~$
create
Docker ホストを作成する
$ docker-machine create --driver virtualbox dev
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
INFO[0007] Starting VirtualBox VM...
INFO[0007] Waiting for VM to start...
INFO[0038] "dev" has been created and is now the active machine. To point Docker at this machine, run: export DOCKER_HOST=$(docker-machine url) DOCKER_AUTH=identity
config
Docker クライアント用の設定を表示する
$ docker-machine config dev
--tls --tlscacert=/Users/ehazlett/.docker/machines/dev/ca.pem --tlscert=/Users/ehazlett/.docker/machines/dev/cert.pem --tlskey=/Users/ehazlett/.docker/machines/dev/key.pem -H tcp://192.168.99.103:2376
こんな風に使う
$ docker $(docker-machine config dev) ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
env
特定のマシンに対して docker
コマンドを打つよう環境変数の設定をする。
# 始めは DOCKER 関連の環境変数はセットされていない
$ env | grep DOCKER
# env コマンドを実行すると環境変数を export する文が表示される
$ docker-machine env dev-01
export DOCKER_TLS_VERIFY=yes
export DOCKER_CERT_PATH=/Users/seigo/.docker/machine/machines/dev-01
export DOCKER_HOST=tcp://192.168.99.100:2376
# サブシェルで env コマンドを実行して環境変数をセットする
$ $(docker-machine env dev-01)
# 手元の Docker クライアントが dev-01 を向くよう環境変数がセットされた
$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_TLS_VERIFY=yes
DOCKER_CERT_PATH=/Users/seigo/.docker/machine/machines/dev-01
# dev-01 に対して docker コマンドを実行できる
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# セットした DOCKER 関連の環境変数を unset する
$ $(docker-machine env -u)
$ env | grep DOCKER
inspect
マシン情報を表示する
$ docker-machine inspect dev-01
{
"DriverName": "virtualbox",
"Driver": {
"MachineName": "dev-01",
"SSHPort": 54286,
"Memory": 1024,
"DiskSize": 20000,
"Boot2DockerURL": "",
"CaCertPath": "/Users/seigo/.docker/machine/certs/ca.pem",
"PrivateKeyPath": "/Users/seigo/.docker/machine/certs/ca-key.pem",
"SwarmMaster": false,
"SwarmHost": "tcp://0.0.0.0:3376",
"SwarmDiscovery": ""
},
"CaCertPath": "/Users/seigo/.docker/machine/certs/ca.pem",
"ServerCertPath": "",
"ServerKeyPath": "",
"PrivateKeyPath": "/Users/seigo/.docker/machine/certs/ca-key.pem",
"ClientCertPath": "",
"SwarmMaster": false,
"SwarmHost": "tcp://0.0.0.0:3376",
"SwarmDiscovery": ""
}
ip
マシンの IP アドレスを表示する
$ docker-machine ip dev-01
192.168.99.100
kill
マシンを強制的にストップする
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
dev-02 * virtualbox Running tcp://192.168.99.101:2376
$ docker-machine kill dev-01
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Stopped
dev-02 * virtualbox Running tcp://192.168.99.101:2376
ls
マシンの一覧を見る
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
dev-02 * virtualbox Running tcp://192.168.99.101:2376
restart
マシンをリスタートする。
これは docker-machine stop; machine start
と同等。
$ docker-machine restart dev-02
INFO[0005] Waiting for VM to start...
rm
マシンを削除する
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
dev-02 * virtualbox Running tcp://192.168.99.101:2376
$ docker-machine rm dev-02
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
ssh
マシンに SSH ログインまたは SSH 経由でコマンドを実行する
$ docker-machine ssh dev-01
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.5.0, build master : a66bce5 - Tue Feb 10 23:31:27 UTC 2015
Docker version 1.5.0, build a8a31ef
$ docker-machine ssh dev-01 "hostname && uname -a"
dev-01
Linux dev-01 3.18.5-tinycore64 #1 SMP Sun Feb 1 06:02:30 UTC 2015 x86_64 GNU/Linux
df -h
のようなオプションを使うコマンドを実行する場合は、--
を使うかクオートで囲む
$ docker-machine ssh dev-01 -- df -h
Filesystem Size Used Available Use% Mounted on
rootfs 899.9M 86.9M 812.9M 10% /
tmpfs 899.9M 86.9M 812.9M 10% /
tmpfs 499.9M 0 499.9M 0% /dev/shm
/dev/sda1 18.2G 58.6M 17.2G 0% /mnt/sda1
cgroup 499.9M 0 499.9M 0% /sys/fs/cgroup
none 233.0G 193.6G 39.3G 83% /Users
/dev/sda1 18.2G 58.6M 17.2G 0% /mnt/sda1/var/lib/docker/aufs
$ docker-machine ssh dev-01 "df -h"
Filesystem Size Used Available Use% Mounted on
rootfs 899.9M 86.9M 812.9M 10% /
tmpfs 899.9M 86.9M 812.9M 10% /
tmpfs 499.9M 0 499.9M 0% /dev/shm
/dev/sda1 18.2G 58.6M 17.2G 0% /mnt/sda1
cgroup 499.9M 0 499.9M 0% /sys/fs/cgroup
none 233.0G 193.6G 39.3G 83% /Users
/dev/sda1 18.2G 58.6M 17.2G 0% /mnt/sda1/var/lib/docker/aufs
start
マシンをスタートする
$ docker-machine start dev-01
INFO[0000] Waiting for VM to start...
stop
マシンをストップする
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Running tcp://192.168.99.100:2376
$ docker-machine stop dev-01
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev-01 virtualbox Stopped
upgrade
最新バージョンの Docker を使うようマシンをアップグレードする。
# with VirtualBox
$ docker-machine upgrade dev-02
INFO[0000] Stopping machine...
INFO[0006] Downloading boot2docker...
# 2015/02/27 現在はここで止まってしまう...
# with DigitalOcean
# 起動した状態だとダメだと言われた
$ docker-machine upgrade staging
ERRO[0018] exec: already started
$ docker-machine stop staging
# 今は動かない模様
$ docker-machine upgrade staging
ERRO[0075] exit status 255
url
マシンの Docker Remote API のエンドポイント URL を表示する
$ docker-machine url dev-01
tcp://192.168.99.100:2376
ドライバ
2015年02月27日現在サポートされているドライバ一覧
- Amazon EC2
- Microsoft Azure
- Microsoft Hyper-V
- DigitalOcean
- Google Compute Engine
- OpenStack
- Rackspace
- SoftLayer
- VirtualBox
- VMware Fusion
- VMware vCloud Air
- VMware vSphere
これ以外にもドライバ追加プルリクエストがある
AWS
Digital Ocean
Change Log
リポジトリに CHANGES.md がある
Roadmap
リポジトリに ROADMAP.md
がある。
今挙っているもので良さそうなのは
- Cloud-init のサポート
- Docker の各種設定
- Swarm との連携の強化
- REST API の提供(マシン作成とかを REST API 経由でできる?)