LoginSignup
375

More than 5 years have passed since last update.

Docker Machine リファレンス

Last updated at Posted at 2015-02-28

概要

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 コマンドでは何が行われているのか

  1. 作成する Docker ホストにアクセスするための SSH キーを作成 (e.g. ~/.docker/machine/machines/<MACHINE_NAME>/id_rsa)
  2. Docker のインストール
  3. リモートから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

Amazon Web Services

Digital Ocean

Digital Ocean

Change Log

リポジトリに CHANGES.md がある

Roadmap

リポジトリに ROADMAP.md がある。

今挙っているもので良さそうなのは

  • Cloud-init のサポート
  • Docker の各種設定
  • Swarm との連携の強化
  • REST API の提供(マシン作成とかを REST API 経由でできる?)

REF

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
375