Docker Machine ユーザガイド v0.7 - beta1

このガイドについて

はじめに

DockerMachineユーザガイド〜基礎編

このガイドについて
Docke ドキュメント（https://docs.docker.com/）の⽇本語翻訳版（http://docs.docker.jp/）をもとに電⼦データ化しました。

免 責事項
現時点ではベータ版であり、内容に関しては無保証です。PDF の評価⽤として公開しました。Docker は活発な開発と改善が続いています。同様に、ドキュメントもオリジナルですら⽇々書き換えが進んでいますので、あらかじめご了承願います。
このドキュメントに関する問題や翻訳に対するご意⾒がありましたら、GitHub リポジトリ上の Issue までご連絡いただくか、pull request をお願いいたします。

 https://github.com/zembutsu/docs.docker.jp

履歴 2016 年 5 ⽉ 12 ⽇ beta1 を公開- 1 -docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

このガイドについて目次

このガイドについて
免責事項
履歴

1

1

1

1.1 Docker Machine と は 何 で し ょ う か

5

1.2 な ぜ 使 う べ き で し ょ う か

5

Mac や Windows 上 で Docker を 実 ⾏ し た い

6リ モ ー ト ・ シ ス テ ム 上 に Docker ホ ス ト を プ ロ ビ ジ ョ ン し た い

6

1.3 Docker Engine と Machine の 違 い

6

1.4 Docker Machine 概 念 の 理 解

8マシン作成⽤のドライバ

8

ロ ー カ ル ま た は ク ラ ウ ド 上 で デ フ ォ ル ト の ベ ー ス OS
Docker ホ ス ト の IP ア ド レ ス

88

CLI の 操 作 対 象 Docker ホ ス ト を 環 境 変 数 で 指 定

81.5 ク ラ ッ シ ュ 報 告12

ヘルプが必要ですか？

12

2.1 Docerk Machine の イ ン ス ト ー ル
2.1.1 Machine を 直 接 イ ン ス ト ー ル

13
13

2.1.2 bash 補 完 ス ク リ プ ト の イ ン ス ト ー ル

14

2.2 Docker Machine を ロ ー カ ル VM で 始 め る
2.2.1 動 作 条 件

15

15

2.2.2 Machine を 使 っ て Docker コ ン テ ナ を 実 ⾏
2.2.3 マ シ ン の 作 成

15

15

2.2.4 Machine コ マ ン ド を 使 っ て コ ン テ ナ を 実 ⾏
2.2.5 マ シ ン の 起 動 と 停 ⽌

1718

2.2.6 マ シ ン の 名 前 を 指 定 せ ず に 操 作 す る に は
2.2.7 起 動 時 に ロ ー カ ル ・ マ シ ン の ⾃ 動 起 動1819

2.3 ク ラ ウ ド ・ プ ロ バ イ ダ で Machine を 使 う
2.3.1 サ ン プ ル

21

Digital Ocean

21

Amazon Web Services (AWS)

21

21

2.3.2 docker-machine create コ マ ン ド

21

2.3.3 ク ラ ウ ド ・ プ ロ バ イ ダ 向 け の ド ラ イ バ

22

- 2 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

このガイドについて

2.3.4 サ ー ド ・ パ ー テ ィ の ド ラ イ バ ・ プ ラ グ イ ン
2.3.5 ド ラ イ バ を 使 わ ず に ホ ス ト を 追 加

22

22

2.3.6 Machine で Docker Swarm ク ラ ス タ の ⾃ 動 構 築

22

3.1 Digital Ocean

23

ス テ ッ プ １ ： Digital Ocean ア カ ウ ン ト の 作 成

23

ステップ２：⾃分のアクセス・トークンを⽣成

23

ス テ ッ プ ３ ： Machine を 使 っ て ド ロ ッ プ レ ッ ト を 作 成

23

ス テ ッ プ ４ ： ド ロ ッ プ レ ッ ト 上 で Docker コ マ ン ド を 実 ⾏
ス テ ッ プ ５ ： Machine で ド ロ ッ プ レ ッ ト を 削 除

24

25

25
3.2 Amazon Web Services (AWS) EC2 の 例

26

ス テ ッ プ １ ： AWS に サ イ ン ア ッ プ し て 証 明 書 を 取 得
ス テ ッ プ ２ ： Machine で イ ン ス タ ン ス を 作 成

26

26

ス テ ッ プ ３ ： イ ン ス タ ン ス 上 で Docker コ マ ン ド を 実 ⾏
ス テ ッ プ ４ ： Machine で イ ン ス タ ン ス を 削 除

27

28

3.3 コ マ ン ド ラ イ ン 補 完

29

コマンド補完のインストール

29

3.4 Boot2Docker か ら Machine へ の 移 ⾏
サブコマンドの⽐較

3030

4.1 docker machine サ ブ コ マ ン ド
active(ア ク テ ィ ブ )31

conﬁ g(コ ン フ ィ グ )32create(ク リ エ イ ト )3331

ヘルプ・テキストで、ドライバを指定するフラグを使う
Docker エ ン ジ ン 作 成 ⽤ の オ プ シ ョ ン を 指 定

35

マ シ ン 作 成 時 に Docker Swarm オ プ シ ョ ン を 指 定
作成の事前確認env(エ ン ブ )

38

41

ip

43

kill(キ ル )
ls

39

40

inspect(イ ン ス ペ ク ト )
例

37

37

プロキシを使わずにマシンを作成
help(ヘ ル プ )

33

41

44

45

タイムアウト45

フィルタリング
書式

45

46
- 3 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

このガイドについて

regenerate-certs(リ ジ ェ ネ レ ー ト ・ サ ー ツ )restart(リ ス タ ー ト )
rm

49

scp

50

ssh

51

異 な る 種 類 の SSH
start(ス タ ー ト )

48

52

53

status(ス テ ー タ ス )stop(ス ト ッ プ )54

55

upgrade(ア ッ プ グ レ ー ド )
url

47

56

57

5.1 サ ポ ー ト し て い る ド ラ イ バ

58

5.2 ド ラ イ バ の オ プ シ ョ ン と デ フ ォ ル ト OS

59

5.3 Amazon Web Services

60

認証ファイルの設定

60

AWS 認 証 情 報 フ ァ イ ル
コマンドラインのフラグ
環境変数

60

60

デ フ ォ ル ト AMI

62

セキュリティ・グループ
VPC ID60

62

62

VPC の 接 続 性

63

VPC セ ッ ト ア ッ プ

63

カ ス タ ム AMI と SSH ユ ー ザ 名

63

5.4 Digital Ocean

64

5.5 generic（ 汎 ⽤ ） ド ラ イ バ

65

例

65

パ ス ワ ー ド で 保 護 さ れ た SSH 鍵
sudo 権 限

65

65

65
オプション

66

5.6 IBM SoftLayer

67

5.7 Microsoft Azure

69

5.8 Oracle VirtualBox

71]既 知 の 問 題

72

- 4 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

1.1 Docker Machineとは何でしょうか

１章

1 章 DockerMachine概要

マ

シ

ン

Docker Machine を使いますと、以下の操作ができます。

 Mac や Windows 上に Docker をインストール・実⾏
 複数のリモート Docker ホストを構築・管理
 Swarm クラスタの構築（プロビジョン）

1.1 Docker Machine とは何でしょうか
Docker Machine（ドッカー・マシン）は仮想マシン上に Docker Engine をインストールするツールであり、docker-machine コマンドを使ってホストを管理します。Machine を使えば、⾃分のローカルの Mac や Windows
上に Docker ホストを作れるだけでなく、あなたの会社のネットワーク上や、
データセンターや、
AWS、
Digital Oceanのようなクラウド・プロバイダ上でも作れます。
docker-machine コマンドで、管理ホストの起動（start）、調査（inspect）、停⽌（stop）、再起動（restart）ができます。他にも Docker クライアントとデーモンの更新や、Docker クライアントが対象のホストへ接続できるような設定もできます。
Machine のコマンドライン上で管理対象のホストを参照するように指定したら、docker コマンドが対象ホストを直接管理します。例えば、docker-machine env default を実⾏したら、操作対象のホストは default という名前のホストにするため、画⾯上に env コマンドの指⽰が表⽰されます。これを使ってセットアップしたあとは、docker
ps や docker run hello-world コマンドなど、指定したホスト上で直接処理できます。

1.2 なぜ使うべきでしょうか
Mac や Windows 上では、Docker Machine を使うのが Docker を実⾏する唯⼀の⽅法です。そして、様々な Linuxで動作するリモート Docker ホストを複数プロビジョン*1 するのにも、ベストの⽅法です。
Docker Machine は主に２つの使い⽅があります。

*1 訳 者 注 ： プ ロ ビ ジ ョ ン す る （ プ ロ ビ ジ ョ ニ ン グ ） と は 、 環 境 と ソ フ ト ウ エ ア の ⾃ 動 設 定 で す 。

- 5 -docs.docker.jp

16/05/21

Mac や Windows 上で Docker を実 行した い

主に Mac や Windows をノート PC 上で動かす場合は、「Docker を実⾏」するために（つまり DockerEngine を動かすために）Docker Machine をローカルにインストールする必要があります。Mac や Windows 環境上で Docker
Machine を使えば、ローカルに Docker Engine が動く仮想マシンをプロビジョニングします。そして、その環境に接続したら、docker コマンドを実⾏可能になります。

リ モート ・システム 上に Docker ホ ストを プロビ ジョ ンした いDocker Engine は Linux システム上でネイティブに動きます。主な利⽤環境が Linux であれば、docker コマンドを実⾏したい場合に必要になるのは Docker Engine のダウンロードとインストールです。それだけでなく、ネット
ワーク上で複数の Docker ホストを効率的にプロビジョンしたい場合、それがクラウドでも、ローカル環境でも実現したいのであれば、Docker Machine が必要になるでしょう。
Docker Machine をインストールしたら、Mac・Windows・Linux の環境を問わず docker-machine コマンドを使って多くの Docker ホストのプロビジョンと管理ができます。Docker Machine は⾃動的にホストを作成し、そこに Docker Engine をインストールし、 docker クライアントの設定を⾏います。管理対象の各ホスト（「マシン」）
が Docker ホストと設定済みのクライアントを結び付けます。

1.3 Docker Engine と Machine の違い
⼀般的に「Docker」と呼ばれるのは Docker Engine を意味します。Docker デーモンはクライアント・サーバ型
レ ス ト エーピーアイ

アプリケーションです。デーモンは特定の REST A P I

インターフェースとコマンド・ライン・インターフェース

（CLI）
で、
デーモンと通信します（正確には、
REST API ラッパーを経由します）。
Docker Engine は CLI からの docker
コマンドを受け付けます。docker run <イメージ名> や docker ps でのコンテナ実⾏や、docker images でイメージの⼀覧などを処理します。

- 6 -docs.docker.jp

16/05/21

Docker Machine は Docker ホスト（Docker Engine が動くホスト環境）のプロビジョニングと管理⽤のツールです。⼀般的には Docker Machine を⾃分のローカルシステム上にインストールします。Docker Machine とはdocker-machine というコマンド・ラインのクライアントと docker という名称の Docker Engine クライアントです。Docker Machine を使えば仮想システム上に Docker Engine をインストールできます。仮想システムとはローカル（Machine を使い、Mac または Windows 上の VirtualBox に Docker Engine をインストール、実⾏します）
でも、リモート（Machine を使い、クラウド・プロバイダ上に Docker をプロビジョン）でも構いません。Dockerに対応したホストであれば、何でも常に「マシン」として管理できる*1 のです。

*1 訳 者 注 ： Docker Machine の 管 理 対 象 の ホ ス ト は 、 ロ ー カ ル で も ク ラ ウ ド 上 で も 「 マ シ ン 」 と い う
概念で抽象化できる、という意味です- 7 -docs.docker.jp

16/05/21

1.4 Docker Machine 概念の理解
Docker Machine を使えば、様々な環境・様々な仮想マシン上で Docker が動くマシンを⾃動作成できます。これはローカルのシステム上だけでなく、クラウド・プロバイダ上でも、ベアメタル・サーバ（物理コンピュータ）上でも可能です。Docker Machine で Docker ホストを作成したら、Docker Engine クライアントを使えば、必要に応じてホスト上でイメージの構築やコンテナ作成が可能になります。

マシン作成用のドライバ
仮想マシンを作成するには、Docker Machine 実⾏時に使いたいドライバの名前を指定します。ドライバの選択
は、仮想マシンをどこで作成するかによります。例えば、ローカルの Mac や Windows システム上であれば、Oracle
VirtualBox が⼀般的なドライバになります。物理マシン上にプロビジョニングする場合は generic （ジェネリック）
ドライバです。クラウド・プロバイダであれば、Docker Machine は AWS・Microsoft Azure・Digital Ocean 等々に対応してます。Docker Machine のリファレンスに サポートしているドライバ⼀覧 があります。

ローカルまたはクラウド上でデフォルトのベース OS
Docker を Linux 上で動かす場合、Docker Machine のプロビジョニングは仮想マシンのベースとなるオペレーティング・システムに依存します。簡単なのはデフォルトのベース・オペレーティング・システムを使うことです。
Oracle Virtual Box ドライバであれば、ベースにするオペレーティング・システムは boot2docker です。クラウド・プロバイダを使う場合はベース・オペレーティング・システムは Ubuntu 12.04 以上です。このデフォルトはマ
シン作成時に変更できます。Docker Machine リファレンスの「サポートしているオペレーティング・システムの⼀覧」をご覧ください。

Docker ホストの IP アドレス
各マシンの作成時、Docker ホストに対して Linux 仮想マシンの IP アドレスが割り当てられます。これはdocker-machine create サブコマンドの実⾏時に割り当てられます。作成したマシンの⼀覧は docker-machine ls
コマンドで確認できます。docker-machine ip <マシン名> コマンドは、指定したホストの IP アドレスを返します。

CLI の操作対象 Docker ホストを環境変数で指定
マシン上で docker コマンドを実⾏する前に、コマンドライン上で対象のマシンを指定する必要があります。
docker-machine env <マシン名> サブコマンドを実⾏したら、適切な命令を出⼒します。
docker-machine サブコマンドの⼀覧は、リファレンスの「Docker Machine サブコマンド」をご覧ください。

- 8 -docs.docker.jp

16/05/21

- 9 -

docs.docker.jp

16/05/21

- 10 -

docs.docker.jp

16/05/21

- 11 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

1.5 クラッシュ報告

1.5 クラッシュ報告
ホストのプロビジョニングには複雑な問題があり、様々な理由により失敗する場合があります。皆さんの作業環
境ではシェル、ネットワーク設定、VPN、プロキシやファイアウォールに関する多くの問題があるかもしれません。
また、これが他との問題の切り分け箇所（クラウド・プロバイダ、あるいは、ネットワーク間での問題か）になります。
docker-machine が安定するための⼿助けとなるよう、私たちはホスト上で create や upgrade を試みるときクラッシュ（障害情報）を監視できるようにしました。クラッシュ報告は HTTPS を経由して送信します。送信される情報は docker-machine のバージョン、構築に関して、OS 、アーキテクチャ、現在のシェル上のパス、ホスト上での直近の履歴といった、 --debug オプション指定時に参照できるものです。送信されたデータは docker-machine
実⾏時にどのような問題が発⽣しているかを、ピンポイントで把握できるようにします。送信されるのは
docker-machine がクラッシュした場合のみです。
エラーメッセージを送りたくなければ、⾃分の $HOME/docker/machine ディレクトリに no-error-report ファイ
ルを置きます。そうしておけば Docker Machine はレポートを報告しません。
$ mkdir -p ~/.docker/machine && touch ~/.docker/machine/no-error-report
このファイルは空のままで構いません。Docker Machine はファイルの存否のみ確認します。

ヘルプが必要ですか？
Docker Machine は開発途上であり、積極的に開発が⾏われています。ヘルプが必要であれば、あるいは貢献したい場合、⼀番簡単なのはプロジェクトの仲間に声をかけることです。私たちはコミュニケーションのために開かれたチャンネルを⽤意しています。

 バグ報告や機能リクエストを送りたい：GitHub の課題トラッカー*1 をご利⽤ください。
 プロジェクトの⼈々とリアルタイムに会話したい：IRC の#docker-machine チャンネルにご参加ください。
*2

 コードやドキュメント変更に貢献したい：GitHub にプル・リクエスト を送信ください。
更に詳しい情報やリソースについては、プロジェクトのヘルプページ*3 をご覧ください。

*1 https://github.com/docker/machine/issues*2 https://github.com/docker/machine/pulls*3 https://docs.docker.com/project/get-help/- 12 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.1 Docerk Machineのインストール

2章

2 章 セットアップ

2.1 Docerk Machine のインストール
OS X と Windows の場合は、Docker Toolbox をインストールしたら、他の Docker プロダクトと⼀緒にインス
トールします。Docker Toolbox の詳細は、「Mac OS X インストールガイド」か「Windows インストールガイド」
をご覧ください。
Docker Machine だけインストールしたい場合は、Machine のバイナリを直接インストールできます。詳細は次のセクションをご覧ください。また、最新版のバイナリは GitHub 上の docker/machine リリース・ページ*1 上で確認できます。

2.1.1 Machine を直接インストール
1. Docker クライアント（docker という名称のバイナリ・ファイル）をインストールします。
*2

2. Docker Machine のバイナリ・ファイル（docker-machine）をダウンロードし、PATH に展開 します。
Mac OS X もしくは Windows の場合：
$ curl -L https://github.com/docker/machine/releases/download/v0.7.0/docker-machine-`uname -s`-`uname-m` > /usr/local/bin/docker-machine && \ ← 1 行で入力
chmod +x /usr/local/bin/docker-machine
Windows 上の git bash の場合：
$ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \curl -L https://github.com/docker/machine/releases/download/v0.7.0/docker-machine-Windows-x86_64.exe> "$HOME/bin/docker-machine.exe" && \ ← 1 行で入力
chmod +x "$HOME/bin/docker-machine.exe"*1 https://github.com/docker/machine/releases/*2 訳 者 注 ： 環 境 変 数 PATH（ パ ス ） に 指 定 さ れ て い る デ ィ レ ク ト リ 上 に 置 き ま す 。

- 13 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.1 Docerk Machineのインストール

あるいは、docker/machine リリース・ページから直接ダウンロードします。
3. Machine のバージョンを表⽰して、インストールを確認します。
$ docker-machine version
docker-machine version 0.7.0, build 61388e9

2.1.2 bash 補完スクリプトのインストール
Machine ⽤のリポジトリには次の機能を持つ bash スクリプトがあります。

 コマンド補完
 シェル・プロンプトにアクティブなホスト*1 を表⽰
 docker-machine use サブコマンドを追加し、アクティブなマシンを切り替えるラッパー
スクリプトをインストールするには、/etc/bash_completion.d か /usr/local/etc/bash_completion.d にファイルをコピーするかリンクします。docker-machine シェル・プロンプトを有効化するには、~/.bashrc の PS1 に$(__docker-machine-ps1) を追加します。
PS1='[\u@\h \W$(__docker-machine-ps1)]\$ '詳細なドキュメントは、各スクリプト*2 の⽂頭にあるコメントをご覧ください。

*1 訳 者 注 ： Docker ク ラ イ ア ン ト の 直 接 操 作 対 象 で す 。
*2 https://github.com/docker/machine/tree/master/contrib/completion/bash- 14 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める

2.2 Docker Machine をローカル VM で始める
2.2.1 動 作条件
バーチャルボックス

システム上に正しくインストールするには、最新バージョンの VirtualBox*1 をインストールする必要があります。
Mac または Windows で Docker Machine のインストールに Docker Toolbox*2 を使えば、VirtualBox を⾃動的にインストールします。
１台⽬のマシンを Quickstart Terminal で作成したら、ターミナル上に default という名称を持つ環境が⾃動的にステージング

⽤意されます。この場合、以下の⼿順をそのまま読み進めても構いませんが、「default」以外の名前（staging や
サンドボックス

sandbox）で別のマシンの作成も可能です。

2.2.2 Machine を使って Docker コンテナを実行
Docker コンテナを実⾏するには、

 新しい Docker 仮想マシン*3 を作成します（あるいは既存マシンを開始します）。
 環境変数を新しい仮想マシンに切り替えます。
 docker クライアントを使い、コンテナの作成、読み込み、管理を⾏います。
Docker Machine で作成したマシンは、必要に応じて何度も再利⽤できます。マシンは VirtualBox 上の仮想マシンと同じで環境あり、どちらでも同じ設定が使われます。
以下の例で、マシンの作成・起動⽅法、Docker コマンドの実⾏⽅法、コンテナの使い⽅を⾒ていきます。

2.2.3 マ シンの作成
1. コマンド・シェルやターミナル画⾯を開きます。
以下の例では Bash シェルを扱います。C シェルのような他のシェルでは、いくつかのコマンドが動作しない可能性がありますので、ご注意ください。
2. docker-machine ls を使い、利⽤可能なマシンの⼀覧を表⽰します。
以下の結果から、マシンがまだ１台も作成されていないことが分かります。
$ docker-machine ls
NAME ACTIVE DRIVER

STATE

URL

SWARM

DOCKERERRORS

3. マシンを作成します。

*1 https://www.virtualbox.org/wiki/Downloads*2 https://www.docker.com/products/docker-toolbox*3

訳 者 注 ： 以 降 の ド キ ュ メ ン ト で は 「 Docker

Machine」 の ツ ー ル を 「 Machine」 と 表 記 し 、 仮 想 マ

シンを「マシン」と表記します。

- 15 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める

クリエイト

ド ラ イ バコマンド docker-machine create 実⾏時、 --driver フラグに virtualbox の⽂字列を指定します。そして、最後の引数がマシン名になります。これが始めてのマシンであれば、名前を default にしましょう。既に「default ｣という名前のマシンが存在している場合は、別の新しいマシン名を指定します。
$ docker-machine create --driver virtualbox default
Running pre-create checks...
Creating machine...
(staging) Copying /Users/ripley/.docker/machine/cache/boot2docker.iso to/Users/ripley/.docker/machine/machines/default/boot2docker.iso...
(staging) Creating VirtualBox VM...
(staging) Creating SSH key...
(staging) Starting the VM...
(staging) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect Docker to this machine, run: docker-machine env default
ブートツードッカー

このコマンドは Docker デーモンをインストールする軽量 Linux ディストリビューション（boot2docker*1）をダ
ウンロードし、Docker を動かすための VirtualBox 仮想マシンを作成・起動します。
4. 再び利⽤可能なマシン⼀覧表⽰したら、新しいマシンが出てきます。
$ docker-machine ls
NAME
ACTIVE DRIVER
default *virtualbox

STATE
Running

URL
tcp://192.168.99.187:2376

SWARM

DOCKER
v1.9.1ERRORS

5. コマンドの環境変数を新しい仮想マシンに設定します。
コマンド docker-machine create を実⾏しても、そのまま新しいマシンを操作できないので注意が必要です。新
しいマシンの操作には docker-machine env コマンドを使います。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/<yourusername>/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"# Run this command to configure your shell:# eval "$(docker-machine env default)"*1 https://github.com/boot2docker/boot2docker- 16 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める

6. シェルを新しいマシンに接続します*1。
$ eval "$(docker-machine env default)"

fish や Powershell、あるいは cmd.exe のような Windows シェルでは、先ほどのコマンドは実⾏できません。⾃分の使っているシェルで環境変数を有効にする⽅法は、env コマンドのドキュメン
トをご覧ください。

このシェル上で指定した環境変数を使えば、クライアントは指定された TLS 設定を読み込みます。新しいシェルの起動時やマシン再起動時には、再度指定する必要があります。
あとはホスト上で Docker コマンドを実⾏できます。

2.2.4 Machine コマンドを使ってコンテナを実行
セットアップが完了したことを確認するため、docker run コマンドを使ってコンテナを起動しましょう。
1. docker run コマンドを使い、busybox イメージをダウンロードし、簡単な echo コマンドを実⾏します。
$ docker run busybox echo hello world
Unable to find image 'busybox' locallyPulling repository busybox
e72ac664f4f0: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
hello world
2. ホストの IP アドレスを確認します。
Docker ホスト上でポート番号が利⽤可能な IP アドレスの確認は、docker-machine ip コマンドを使います。
$ docker-machine ip default
192.168.99.100
3. コンテナでウェブサーバ（https://www.nginx.com/）を実⾏するため、次のコマンドを実⾏します。
$ docker run -d -p 8000:80 nginx
イメージの取得が完了したら、docker-machine ip で確認した IP アドレス上のポート 8000 でサーバにアクセスできます。実⾏例：$ curl $(docker-machine ip default):8000<!DOCTYPE html><html><head>*1

訳者注：ドキュメントでは「接続」という表現を使っていますが、常に通信セッションを継続して い る 状 態 で は あ り ま せ ん 。 ク ラ イ ア ン ト が 操 作 対 象 の Docker

Engine を 指 し ⽰ す 状 態 を 「 接 続 」 と表現しています。同様に、対象ホストを指さない状態を「切断」と表現しています。

- 17 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める<title>Welcome to nginx!</title><style>body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>
あとは、好きなだけ実⾏したいローカル仮想マシンを作成・管理できます。そのためには docker-machine create
を実⾏するだけです。作成されたマシン全ての情報を確認するには docker-machine ls を使います。

2.2.5 マ シンの起動と停止
ホストを使い終わり、しばらく使わないのであれば、docker-machine stop を実⾏して停⽌できます。あとで起動したい場合は docker-machine start を実⾏します。
$ docker-machine stop default$ docker-machine start default

2.2.6 マ シンの名前を指定せずに操作するにはいくつかの docker-machine コマンドは、マシン名を明⽰しなければ default という名称のマシン（が存在している場合）に対して処理を⾏います。そのため、default ローカル仮想マシンは⼀般的なパターンとして、頻繁に利⽤できるでしょう。
実⾏例：$ docker-machine stop
Stopping "default"....
Machine "default" was stopped.
$ docker-machine start
Starting "default"...
(default) Waiting for an IP...
Machine "default" was started.
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
$ eval $(docker-machine env)
$ docker-machine ip- 18 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める

192.168.99.100
コマンドは以下の形式でも利⽤可能です。

 docker-machine config
 docker-machine env
 docker-machine inspect docker-machine ip
 docker-machine kill
 docker-machine provision
 docker-machine regenerate-certs
 docker-machine restart docker-machine ssh docker-machine start docker-machine status
 docker-machine stop docker-machine upgrade docker-machine url
default 以外のマシンでは、常に特定のマシン名をコマンドの引数として明⽰する必要があります。

2.2.7 起 動時にローカル・マシンの自動起動
シェルのセッションを開く度に、Docker クライアントが⾃動的に毎回設定された状態にするには、対象ユーザのシェル proﬁle（例：~/.bash_profile ファイル）に追記（eval $(docker-machine env default)）します。しかし、default のマシンが起動されていなければコマンドは実⾏できません。そのような場合は、システム起動時にdefault マシンが⾃動的に起動するよう設定します。
以下の例は OS X 上での設定です。
~/Library/LaunchAgents 以下に com.docker.machine.default.plist ファイルを作成します。内容は次の通りです。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>EnvironmentVariables</key><dict><key>PATH</key><string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string></dict><key>Label</key><string>com.docker.machine.default</string><key>ProgramArguments</key><array><string>/usr/local/bin/docker-machine</string><string>start</string><string>default</string></array><key>RunAtLoad</key>- 19 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.2 Docker MachineをローカルVMで始める<true/></dict></plist>
この中にある LaunchAgent の default を書き換えれば、任意のマシン（群）を起動できます。

- 20 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.3 クラウド・プロバイダでMachineを使う

2.3 クラウド・プロバイダで Machine を使う
Docker Machine は様々なクラウド・プラットフォームに対応したプラグインを扱えます。このプラグインに対応したドライバを使えば、Machine でクラウド・ホストを⾃動作成します。そして、作成するホスト上に Docker
Engine も⾃動インストールできます。
必要になるのは Docker Machine のインストール・実⾏と、利⽤するクラウド・プロバイダ上でのアカウント作
成です。
次にアカウント証明書、セキュリティ証明書など、docker-machine create コマンドのオプション⽤フラグで必要 な も の を 確 認 し ま す 。 例 え ば 、 Digital Ocean の ア ク セ ス ・ ト ー ク ン を 指 定 す る に は--digitalocean-access_token フラグを使います。以降で Digital Ocean と AWS の設定例を⾒ていきます。

2.3.1 サ ンプル
Digital Ocean
次のコマンドは Digital Ocean 上に「docker-sandbox」という名前のドロップレット（クラウド・ホスト）を作成します。
$ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox
Machine を使い、Digital Ocean 上のホストで更なる操作をするには「Digital Ocean サンプル」のセクションをご覧ください。

Amazon Web Services (AWS)
次のコマンドは AWS EC2 上に「aws-sandbox」という名前のドロップレット（クラウド・ホスト）を作成します。
$ docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key
8T93C******* aws-sandbox
Machine を使い、AWS 上の Docker 対応インスタンスで更なる操作をするには「Amazon Web Services (AWS)
サンプル」のセクションをご覧ください。

2.3.2 docker-machine create コマンド
docker-machine create コマンドの実⾏時、いくつか最⼩限の指定が必要となります。

 --driver で、マシンを作成するプロバイダを明⽰します（VirtualBox、Digital Ocean AWS、等）。
 クラウド・サービスを使う場合は、（クラウド・プロバイダの）アカウント証明書やセキュリティ証明書の指定。
 <マシン名> で、作成したいホスト名を指定
扱いやすいように、docker-machine でサーバ作成時に⼀般的なオプションがデフォルトで適⽤されます。しかし、これらのデフォルト値はフラグを使って上書きできます（例： --digitalocean-image）。そのため、クラウド・サーバに多くのメモリや CPU を割り当てたい場合には便利でしょう（デフォルトの docker-machine は⼩さなサーバを作成します）。
デフォルトの値、あるいは利⽤可能なフラグや設定を全て確認したい場合は、コマンドラインで docker-machine
create -h を使います。他にも、Machine コマンドライン・リファレンス の create コマンドや、Machine ドライ- 21 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

2.3 クラウド・プロバイダでMachineを使う

バ・リファレンスの「ドライバのオプション」と「デフォルト OS」をご覧ください。

2.3.3 ク ラウド・プロバイダ向けのドライバ
Docker Machine をインストールしたら、様々なクラウド・プロバイダに対応したドライバ（Amazon Web
Services 、 Digital Ocean 、 Microsoft Azure 等）と、ローカルのプロバイダ（Oracle VirtualBox 、VMware Fusion 、Microsoft Hyper-V）が利⽤可能になります。
各ドライバの詳細は Docker Machine ドライバ・リファレンス から、必要なフラグや設定オプション（プロバ
イダごとにかなり違います）をご確認ください。

2.3.4 サ ード・パーティのドライバ・プラグイン
サード・パーティの貢献者による様々なクラウド・プラットフォームに対応した Docker Machine プラグインがあります。これらのプラグイン利⽤にあたっては、利⽤者の皆さん⾃⾝でリスクを取ってください。Docker によって直接メンテナンスされているものではありません。
使うには、GItHub の docker/machine リポジトリ上の利⽤可能なドライバ・プラグイン*1 をご覧ください。

2.3.5 ド ライバを使わずにホストを追加
Docker の場所を指定したら、ドライバがないホストの追加が可能です。既存のホストに関するマシン名を指定することにより、Docker コマンド使⽤時に毎回オプションを指定する必要がなくなります。
$ docker-machine create --url=tcp://50.134.234.20:2376 custombox$ docker-machine ls
NAME
ACTIVE DRIVER
STATE
URL
custombox *none
Running tcp://50.134.234.20:2376

2.3.6 Machine で Docker Swarm クラスタの自動構築
Docker Machine を使えば Docker Swarm クラスタのプロビジョンもできます。どのドライバを使っても TLS で安全にします。

 Swarm を使うには「Docker Swarm の⼊⼿⽅法」のドキュメントをご覧ください。
 Machine で Swarm クラスタを構築する⽅法は「Docker Machine で Swarm クラスタをプロビジョン」のドキュメントをご覧ください。

*1 https://github.com/docker/machine/blob/master/docs/AVAILABLE_DRIVER_PLUGINS.md- 22 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.1 Digital Ocean

3章

3 章 使い方

3.1 Digital Ocean
以下の例では Docker に対応した Digital Ocean ドロップレット（クラウド・ホスト）を作成します。

ステップ１：Digital Ocean アカウントの作成
アカウントの取得がまだであれば、Digital Ocean 上にアカウントを作成し、それからログインします。

ステップ２：自分のアクセス・トークンを生成
アクセス・トークンを⽣成します。
1. Digital Ocean 管理コンソールに移動し、ページ上⽅にある［ API ］をクリックします。
2. ［ Generate New Token ］（新しいトークンの⽣成）をクリックして、トークンの⽣成に進みます。
3. トークン名を指定し（例「machine」）、［ Write ］(Optional) にチェックが⼊っているのを確認してから［ Generate Token ］（トークン⽣成）をクリックします。
4. ⽣成された⻑いバイナリ⽂字列を取得し（クリップボードにコピーします）、どこか安全な場所に保管します。
これが次のクラウド・サーバの作成に必要となる、個⼈のアクセス・トークンです。

ステップ３：Machine を使ってドロップレットを作成
1. docker-machine create コマンドの実⾏時に、digitalocean ドライバと --digitalocean-access-token フラグ
で⾃分のキーを指定します。あわせて新しいクラウド・サーバ名も指定します。
次の例は、「docker-sandbox」という名前の新しいドロップレットを作成します。
$ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox
Running pre-create checks...
Creating machine...
- 23 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.1 Digital Ocean(docker-sandbox) OUT | Creating SSH key...
(docker-sandbox) OUT | Creating Digital Ocean droplet...
(docker-sandbox) OUT | Waiting for IP address to be assigned to the Droplet...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning created instance...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
To see how to connect Docker to this machine, run: docker-machine env docker-sandbox
Droplet が作成されたら、Docker はユニークな SSH 鍵を⽣成し、⾃分のローカル・システム上の~/.docker/machines に保存します。当初、この鍵はホストのプロビジョニング⽤に使われます。後ほど、docker-machine ssh コマンドでドロップレットに簡単にアクセスするときにも使います。Docker Engine はクラウド・サーバ上にインストールされます。そして、TCP を通してリモートからの通信を受け付けられるように TLS認証を使います。
2. Digital Ocean コンソールに移動し、新しいドロップレットの情報を確認します。
3. コマンド・ターミナル上で docker-machine ls を実⾏します。
$ docker-machine ls
NAME
ACTIVE
default
docker-sandbox *DRIVER
virtualbox
digitalocean

STATE
Running
Running

URL
tcp://192.168.99.100:2376
tcp://45.55.139.48:2376

SWARM

新しい docker-sandbox マシンが実⾏されています。そして、アクティブなホストはアスタリスク（*）印が付いています。新しいマシンを作成したら、コマンド・シェルから⾃動的に接続できます。何らかの理由により、新しいマシンがアクティブなホストでない場合は docker-machine env docker-sandbox を実⾏し、反映するためには
eval $(docker-machine env docker-sandbox) の実⾏が必要です。

ステップ４：ドロップレット上で Docker コマンドを実行
1. docker-machine コマンドを使ってリモート・ホストの情報を確認できます。例えば、docker-machine ip <マシン名> はホスト側の IP アドレスを取得します。より詳しい情報は docker-machine inspect <マシン名> で確認できます。
$ docker-machine ip docker-sandbox
104.131.43.236$ docker-machine inspect docker-sandbox{"ConfigVersion": 3,"Driver": {"IPAddress": "104.131.43.236","MachineName": "docker-sandbox","SSHUser": "root","SSHPort": 22,"SSHKeyPath": "/Users/samanthastevens/.docker/machine/machines/docker-sandbox/id_rsa","StorePath": "/Users/samanthastevens/.docker/machine",- 24 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.1 Digital Ocean"SwarmMaster": false,"SwarmHost": "tcp://0.0.0.0:3376","SwarmDiscovery": "",...
2. Docker Engine が正しくインストールされたかどうか確認するため、docker コマンドを実⾏します。
docker run hello-world のような基本的なコマンドを、新しいリモート・マシン上で実⾏します。あるいは、より⾯⽩いテストとなるよう Docker に対応したウェブサーバを実⾏します。
次の例は -p オプションで nginx コンテナのポート 80 を公開できるようにし、それを docker-sandbox ホスト上のポート 8000 に割り当てます。
$ docker run -d -p 8000:80 --name webserver kitematic/hello-world-nginx
Unable to find image 'kitematic/hello-world-nginx:latest' locallylatest: Pulling from kitematic/hello-world-nginx
a285d7f063ea: Pull complete
2d7baf27389b: Pull complete...
Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066
Status: Downloaded newer image for kitematic/hello-world-nginx:latest
942dfb4a0eaae75bf26c9785ade4ff47ceb2ec2a152be82b9d7960e8b5777e65
ウェブブラウザで http://<ホスト IP>:8000 を開き、ウェブサーバのホームページを開きます。 ホスト IP の確
認は、先ほどの docker-machine ip <マシン名> コマンドで⾏いました。docker run コマンドを実⾏したら、指定したポートを開きます。

ステップ５：Machine でドロップレットを削除
ホストだけでなく全てのコンテナとイメージを削除するには、マシンを停⽌するために docker-machine rm を使います。
$ docker-machine stop docker-sandbox$ docker-machine rm docker-sandbox
Do you really want to remove "docker-sandbox"? (y/n): y
Successfully removed docker-sandbox$ docker-machine ls
NAME
ACTIVE DRIVER
default *virtualbox

STATE
Running

URL
SWARM
tcp:////xxx.xxx.xx.xxx:xxxx

コマンドを実⾏後に Digital Ocean コンソールを確認したら、すぐにドロップレットが停⽌し、削除されるのが分かるでしょう。
Docker Machine は作成したホストは、クラウド・プロバイダのコンソールからも削除できます。ただし Machineからは状況が追跡できなくなります。そのため、docker-machine create で作成したホストは docker-machine rm
をお使いください。

- 25 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.2 Amazon Web Services (AWS) EC2 の例

3.2 Amazon Web Services (AWS) EC2 の例
以下の例では Docker に対応した Amazon Web Services (AWS) EC2 インスタンスを作成します。

ステップ１：AWS にサインアップして証明書を取得
1. まだ AWS の利⽤者でなければ、AWS にサインアップし、EC2 クラウド・コンピュータに対して root アクセスを持つアカウントを作成します。
既に Amazon アカウントをお持ちであれば、⾃分の root ユーザ・アカウントを利⽤できます。
2. IAM (Identity and Access Management) 管理ユーザと管理グループを作成し、リージョンに鍵ペアを関連づけます。
まず、AWS メニューの［ サービス ］から［ IAM ］を選びます。
AWS 上でマシンを作成するには、２つのパラメータが必要です。

 AWS アクセスキー
 AWS シークレットアクセスキー
AWS にある Amazon EC2 でのセットアップ*1 のドキュメントをご覧ください。この中にある「IAM ユーザーを作成する」「キーペアを作成する」の各⼿順を進めます。

ステップ２：Machine でインスタンスを作成
1. オプションで AWS 認証⽤ファイルを作成できます。
~/.aws/credentials ファイルを作成し、AWS 鍵を記述できます。そうしておけば、docker-machine create コ
マンドを実⾏する度に⼊⼒する必要はありません。以下が認証⽤ファイルの例です。
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
2. docker-machine create コマンドの実⾏時、amazonec2 ドライバと鍵と新しいインスタンス名を指定します。

認証用ファイルを 使う 場合
鍵を認証⽤ファイルに⼊れている場合は、次のコマンドを実⾏すると aws-sandbox という名前のインスタンスを起動します。
$ docker-machine create --driver amazonec2 aws-sandbox*1 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html- 26 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.2 Amazon Web Services (AWS) EC2 の例

鍵をコマン ドラ インで 指定 する場 合
認証⽤ファイルを使わない場合は、コマンドラインで --amazonec2-access-key と --amazonec2-secret-key を指定します。
$ docker-machine create --driver amazonec2 \--amazonec2-access-key AKI******* --amazonec2-secret-key 8T93C******* aws-sandbox
リージョン の指 定
デフォルトでは、ドライバは新しいインスタンスを us-east-1 (North Virginia) リージョンで作成します。別のリージョンで作成するには --amazonec2-region フラグを使います。例えば「aws-01」マシンを us-west-1 (Northern
California)で作成するには、次のように実⾏します。
$ docker-machine create --driver amazonec2 --amazonec2-region us-west-1 aws-01
3. AWS EC2 ダッシュボードに移動し、新しいインスタンスを確認します。
AWS に IAM 証明書でログインし、EC2 実⾏中のインスタンスの画⾯に移動します。
メニュー右上で対象のリージョンを選択してください。そうすると、インスタンスが⾒えるでしょう 。 docker-machine create 実 ⾏ 時 に リ ー ジ ョ ン を 指 定 し な け れ ば （ オ プ シ ョ ン の--amazonec2-region フラグを使う）、デフォルトでは US East リージョンになります。

4. コマンド・ターミナル上で docker-machine ls を実⾏します。
$ docker-machine ls
NAME
ACTIVEERRORS
aws-sandbox*
default
aws-sandbox-

DRIVER

STATE

URL

amazonec2
virtualbox
digitalocean

Running
Running
Running

tcp://52.90.113.128:2376
tcp://192.168.99.100:2376
tcp://104.131.43.236:2376

SWARM

DOCKERv1.10.0
v1.10.0-rc4
v1.9.1

新しい aws-sandbox マシンが実⾏されています。そして、アクティブなホストはアスタリスク（*）印が付いています。新しいマシンを作成すると、コマンド・シェルから⾃動的に接続できます。何らかの理由により、新しいマシンがアクティブなホストでない場合は docker-machine env aws-sandbox を実⾏し、反映するためには eval$(docker-machine env aws-sandbox) の実⾏が必要です。

ステップ３：インスタンス上で Docker コマンドを実行
1. docker-machine コマンドを使ってリモート・ホストの上⽅を確認できます。例えば、docker-machine ip <マシン名> はホスト側の IP アドレスを取得します。より詳しい情報は docker-machine inspect <マシン名> で確認できます。
$ docker-machine ip
192.168.99.100$ docker-machine inspect aws-sandbox{"ConfigVersion": 3,"Driver": {- 27 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

3.2 Amazon Web Services (AWS) EC2 の例"IPAddress": "52.90.113.128","MachineName": "aws-sandbox","SSHUser": "ubuntu","SSHPort": 22,...
2. Docker Engine が正しくインストールされたかどうか確認するため、docker コマンドを実⾏します。
docker run hello-world のような基本的なコマンドを、新しいリモート・マシン上で実⾏します。あるいは、より⾯⽩いテストとなるよう Docker に対応したウェブサーバを実⾏します。
次の例は -p オプションで nginx コンテナのポート 80 を公開できるようにし、それを aws-sandbox ホスト上のポート 8000 に割り当てます。
$ docker run -d -p 8000:80 --name webserver kitematic/hello-world-nginx
Unable to find image 'kitematic/hello-world-nginx:latest' locallylatest: Pulling from kitematic/hello-world-nginx
a285d7f063ea: Pull complete
2d7baf27389b: Pull complete...
Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066
Status: Downloaded newer image for kitematic/hello-world-nginx:latest
942dfb4a0eaae75bf26c9785ade4ff47ceb2ec2a152be82b9d7960e8b5777e65
ウェブブラウザで http://<ホスト IP>:8000 を開き、ウェブサーバのホームページを開きます。ホスト IP の確認
は、先ほどの docker-machine ip <マシン名> コマンドで⾏いました。docker run コマンドを実⾏すると、指定したポートを開きます。

ステップ４：Machine でインスタンスを削除
ホストだけでなく全てのコンテナとイメージを削除するには、マシンを停⽌するために docker-machine rm を使います。
$ docker-machine stop aws-sandbox$ docker-machine rm aws-sandbox
Do you really want to remove "aws-sandbox"? (y/n): y
Successfully removed aws-sandbox- 28 -

docs.docker.jp

16/05/21

3.3 コマンドライン補完
Docker Machine は bash シェルでコマンド補完(command-line completion)が使えます。

コ マンド 補完の インス トール
bash
bash 補完（bash completion) がインストールされているかどうか確認します。お使いの Linux 環境が最⼩イン
ストールでなければ、おそらく補完機能が利⽤できます。Mac では brew install bash-completion でインストー
ルします。
補完スクリプトを /etc/bash_completion.d/ に置きます（Mac の場合 brew --prefix`/etc/bash_completion.d/）。例：
files=(docker-machine docker-machine-wrapper docker-machine-prompt)
for f in "${files[@]}"; docurl -L https://raw.githubusercontent.com/docker/machine/v$(docker-machine --version | tr -ds ',' ' '| awk 'NR==1{print $(3)}')/contrib/completion/bash/$f.bash > `brew --prefix`/etc/bash_completion.d/$f
done
次回ログイン時から補完機能が使えます。

- 29 -

docs.docker.jp

16/05/21

3.4 Boot2Docker から Machine への移行
これまで Boot2Docker を使っていた場合は、既に Docker の boot2docker-vm 仮想マシンがローカルシステム上に存在しています。Docker Machine で古い仮想マシンを管理する場合は、移⾏が必要です。
1. ターミナルか、システム上の Docker CLI を開きます。
2. 次のコマンドを実⾏します。
$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm docker-vm
3. docker-machine コマンドを使い、対話式に仮想マシンを移⾏します。

サブコマンドの比較
docker-machine サブコマンドは、boot2docker サブコマンドと若⼲の違いがあります。次の表は docker-machine
サブコマンドとの互換性を⽐較したものです。
boot2docker

docker-machine

docker-machine の説明

init
up
ssh
save
down
poweroff
reset
configstatusinfo
ipshellinit
deletedownload
upgradecreate
start
ssh
－
stop
stop
restartinspectls
inspectip
env
rm－
upgrade新しい docker ホストの作成
停⽌しているマシンの起動
コマンドの実⾏やマシンとの双⽅向 ssh セッション
使⽤不可
実⾏中のマシンの停⽌
実⾏中のマシンの停⽌
実⾏中のマシンの再起動
マシン設定詳細の表⽰
マシン⼀覧と状態の表⽰
マシンの詳細を表⽰
マシンの IP アドレスを表⽰
シェルがマシンと対話するために必要なコマンドの表⽰
マシンの削除使⽤不可
マシン上の Docker クライアントを最新安定版に更新

参- 30 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

4章

4 章 Machine コマンドライン・リファレンス

4.1 docker machine サブコマンド
アクティブ

activeどのマシンが「アクティブ」かを表⽰します（Docker Machine は DOCKER_HOST 環境変数が⽰すところをアクティブとみなします ）。
$ docker-machine ls
NAME
ACTIVE DRIVER
dev
virtualbox
staging *digitalocean$ echo $DOCKER_HOST
tcp://203.0.113.81:2376$ docker-machine active
staging

STATE
Running
Running

URL
tcp://192.168.99.103:2376
tcp://203.0.113.81:2376- 31 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

コンフィグ

config
対象マシンに対する Docker クライアントの設定を表⽰します。
使い方: docker-machine config [オプション] [引数...]マシンに接続する設定を表示
説明:
引数はマシン名。
オプション:--swarm

Docker デーモンの代わりに Swarm 設定を表示

実⾏例：$ docker-machine config dev--tlsverify--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- 32 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

クリエイト

createマシンを作成します。どのプロバイダ（VirtualBox、Digital Ocean、AWS 等）でマシンを作成するかを --driver
フラグで指定します。更に、引数で作成するマシンの名前も指定します。
$ docker-machine create --driver virtualbox dev
Creating CA: /home/username/.docker/machine/certs/ca.pem
Creating client certificate: /home/username/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /home/username/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.6.2/boot2docker.iso to/home/username/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev

ヘ ルプ・ テキス トで、 ドライバを指 定するフ ラグ を使う
docker-machine create コマンドには全てのドライバで適⽤できる共通のフラグがあります。主に、マシンのプ
ロビジョニング⼿順における挙動を制御するもので（Docker Swarm コンテナの作成も含みます）、利⽤者がカスタマイズできます。
$ docker-machine create
Docker Machine Version: 0.5.0 (45e3688)
使い方: docker-machine create [オプション] [引数...]
マシンを作成する。
'docker-machine create --driver 名前' を実行すると、対象ドライバで作成時のヘルプ文字列を表示。
オプション:--driver, -d "none"
マシン作成に使うドライバ--engine-install-url "https://get.docker.com"
エンジンをインストールするカスタム URL [$MACHINE_DOCKER_INSTALL_URL]--engine-opt [--engine-opt option --engine-opt option]engine 作成時に任意のフラグを flag=value 形式で指定--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option]
作成するエンジンで安全では無いレジストリ (insecure registry) を指定--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option]
レジストリのミラーを使う指定 [$ENGINE_REGISTRY_MIRROR]--engine-label [--engine-label option --engine-label option]engine 作成時にラベルを指定--engine-storage-driverengine が使うストレージ・ドライバの指定--engine-env [--engine-env option --engine-env option]engine で使う環境変数を指定--swarm
Swarm と Machine を使う設定--swarm-image "swarm:latest"
Swarm が使う Docker イメージの指定 [$MACHINE_SWARM_IMAGE]- 33 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド--swarm-master
Machine で Swarm マスタ用の設定--swarm-discovery
Swarm で使うディスカバリ・サービス--swarm-strategy "spread"
Swarm のデフォルト・スケジューリング・ストラテジを指定--swarm-opt [--swarm-opt option --swarm-opt option]
swarm に任意のフラグを指定--swarm-host "tcp://0.0.0.0:3376"
Swarm マスタ上でリッスンする ip/socket--swarm-addr
Swarm のアドバタイズ・アドレス (デフォルト: 検出、もしくはマシン IP を使用)--swarm-experimental
更に、Machine は各プラグイン・コードに含むフラグも受け付けることができ、これをドライバのフラグで指定できます。これにより、利⽤者は作成するマシン向けプロバイダ固有のパラメータをカスタマイズできます。例えば、容量（ --amazonec2-instance-type m1.medium ）や地理的なリージョン（ --amazonec2-region us-west-1 ）などです。
プロバイダ固有のフラグを確認するには create と --driver にヘルプ・テキストの表⽰を単純に指定するだけです。
$ docker-machine create --driver virtualbox --help
使い方: docker-machine create [オプション] [引数...]
マシンを作成。
'docker-machine create --driver 名前' を実行すると、対象ドライバで作成時のヘルプ文字列を表示。
オプション:--driver, -d "none"
マシン作成に使うドライバ--engine-env [--engine-env option --engine-env option]engine で使う環境変数を指定--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option]
作成するエンジンで安全では無いレジストリ (insecure registry) を指定--engine-install-url "https://get.docker.com"
エンジンをインストールするカスタム URL [$MACHINE_DOCKER_INSTALL_URL]--engine-label [--engine-label option --engine-label option]engine 作成時にラベルを指定--engine-opt [--engine-opt option --engine-opt option]engine 作成時に任意のフラグを flag=value 形式で指定--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option]
レジストリのミラーを使う指定 [$ENGINE_REGISTRY_MIRROR]--engine-storage-driverengine が使うストレージ・ドライバの指定--swarm
Swarm と Machine を使う設定--swarm-addr
Swarm のアドバタイズ・アドレス (デフォルト: 検出、もしくはマシン IP を使用)--swarm-discovery
Swarm で使うディスカバリ・サービス--swarm-experimental
Swarm の実験的機能を有効化--swarm-host "tcp://0.0.0.0:3376"- 34 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

Swarm マスタ上でリッスンする ip/socket--swarm-image "swarm:latest"
Swarm が使う Docker イメージの指定 [$MACHINE_SWARM_IMAGE]--swarm-master
Machine で Swarm マスタ用の設定--swarm-opt [--swarm-opt option --swarm-opt option]
swarm に任意のフラグを指定--swarm-strategy "spread"
Swarm のデフォルト・スケジューリング・ストラテジを指定--virtualbox-boot2docker-url
boot2docker イメージの URL を指定。デフォルトは利用可能な最新バージョン[$VIRTUALBOX_BOOT2DOCKER_URL]--virtualbox-cpu-count "1"
マシンで使う CPU 数 (-1 は利用可能な CPU 全て) [$VIRTUALBOX_CPU_COUNT]--virtualbox-disk-size "20000"
ホストのディスク容量を MB 単位で指定 [$VIRTUALBOX_DISK_SIZE]--virtualbox-host-dns-resolver
ホストが使う DNS リゾルバ [$VIRTUALBOX_HOST_DNS_RESOLVER]--virtualbox-dns-proxy
全ての DNS リクエストをホストへプロキシ [$VIRTUALBOX_DNS_PROXY]--virtualbox-hostonly-cidr "192.168.99.1/24"
ホスト・オンリー CIDR の指定 [$VIRTUALBOX_HOSTONLY_CIDR]--virtualbox-hostonly-nicpromisc "deny"
ホスト・オンリー・ネットワーク・アダプタをプロミスキャスト・モードに指定[$VIRTUALBOX_HOSTONLY_NIC_PROMISC]--virtualbox-hostonly-nictype "82540EM"
ホスト・オンリー・ネットワーク・アダプタの種類を指定 [$VIRTUALBOX_HOSTONLY_NIC_TYPE]--virtualbox-import-boot2docker-vm
取り込む Boot2Docker VM のイメージ名--virtualbox-memory "1024"
ホスト側のメモリ容量を MB で指定 [$VIRTUALBOX_MEMORY_SIZE]--virtualbox-no-share
環境変数を使ってもフラグと同様の指定ができますので、覚えておいてください（列の左側にあります）。環境
変数は docker-machine create の実⾏時に読み込まれ、Docker machine はフラグのデフォルト値を上書きします。

Docker エンジ ン作成 用の オプショ ンを指 定
作成時の⼿順において、Docker Machine は Docker をインストールし、適切な初期設定をします。例えば、外の世界から TLS をベースとした暗号化 TCP を通して通信できるようにし、ストレージ・ドライバ が利⽤可能であれば AUFS を設定します。
Docker エンジン（あるいは Docker デーモン）に対して、利⽤者は⾃分⾃⾝でオプションを設定すべきケースが複数あります。例えば、⾃分たちで実⾏しているレジストリに接続するには、デーモンに対して--insecure-registry フラグを使う必要があります。Docker Machine で create コマンドを使ってエンジンを作成する場合、 --engine で始まるフラグを設定できます。
Docker Machine は、デーモンに対するパラメータを単にセットするだけであり、「依存関係」については設定しませんので、ご注意ください。例えば、デーモンでストレージ・ドライバに btrfs を指定する場合は、⾃分⾃⾝で依存関係のインストールと、BTRFS ファイルシステムの作成等が必要です。
$ docker-machine create -d virtualbox \--engine-label foo=bar \--engine-label spam=eggs \--engine-storage-driver overlay \--engine-insecure-registry registry.myco.com \- 35 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

foobarmachine
これはローカルの VirtualBox に仮想マシンを作成するにあたり、ストレージのバックエンドには overlay を使⽤し、エンジンのラベルとしてキーバリュー・ペアの foo=bar と spam=eggs を指定します。更に、 registry.myco.comにある⾮安全なレジストリへのイメージ送信・取得を許可します。詳細情報は docker info の出⼒結果から確認できます。
$ eval $(docker-machine env foobarmachine)$ docker info
Containers: 0
Images: 0
Storage Driver: overlay...
Name: foobarmachine...
Labels:foo=barspam=eggs
provider=virtualbox
ここでは次のフラグが使えます。

 --engine-insecure-registry : 作成するエンジンが、指定した安全では無いレジストリと通信できるようにする。
 --engine-registry-mirror : 使⽤するレジストリ・ミラーを指定。
 --engine-label : 作成するエンジン⽤のラベルを指定。
 --engine-storage-driver : エンジンが使うストレージ・ドライバを指定。
エンジンは複数回のラベル指定（ --label を使⽤）をサポートしており、Docker Machine で設定できます。
デーモンのフラグを直接指定できるのに加え、Docker Machine は --engine-opt という追加フラグもサポートしています。これは --engine-opt flagname=value の形式で、特別な属性を持つデーモンのオプション指定に使います。例えば、全てのコンテナが DNS サーバに 8.8.8.8 を使うようデーモンに指定したり、常に syslog ログ・ド
ライバ を使って実⾏させたりするには、次のように create コマンドを使います。
$ docker-machine create -d virtualbox \--engine-opt dns=8.8.8.8 \--engine-opt log-driver=syslog \gdns
更に、Docker Machine は --engine-env フラグをサポートしています。これは外部の環境変数を指定するものであり、エンジンに適⽤するには --engine-env name=value の形式で指定します。例えば、エンジンが example.com
をプロキシ・サーバとして使うには、create コマンドで次のように実⾏します。
$ docker-machine create -d virtualbox \--engine-env HTTP_PROXY=http://example.com:8080 \--engine-env HTTPS_PROXY=https://example.com:8080 \--engine-env NO_PROXY=example2.com \proxbox- 36 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

マ シン作 成時に Docker Swarm オプ ションを 指定
先ほどの Docker Engine オプションの設定を指定できるだけではありません。Docker Machine を使えば、Swarm マスタをどのように作成するかも指定できます。 --swarm-strategy フラグを使えば、Docker Swarm が使うべきスケジューリング・ストラテジ（デフォルトは spread ストラテジ ）を指定できます。また前述した--engine-opt オプションで指定したように、 --swarm-opt オプションで⼀般的なオプションを設定できますが、違いは swarm manage コマンドに対するオプション（マスタ・ノードの起動時に使⽤）を指定するものです。これ
らの機能設定を使うことで、パワーユーザであれば heartbeat 間隔の調整や、Swarm のオーバーコミット・リソー
スの調整に活⽤できるでしょう。また、 --swarm-experimental フラグを使えば Docker Swarm の実験的機能が利⽤可能になります。
どのようにオプションを設定するか分からない場合は、何も指定しないのがベストな⽅法です。何も⼼配しなくても、Docker Machine は適切に初期設定を⾏います。
作成例：$ docker-machine create -d virtualbox \--swarm \--swarm-master \--swarm-discovery token://<token> \--swarm-strategy binpack \--swarm-opt heartbeat=5 \upbeat
こちらは Swarm スケジューリング・ストラテジに「binpack」を指定し（ホストに広く展開するのではなく、できるだけコンテナをホストに集約する設定）、「heartbeat」間隔を５秒にします。

作 成の事 前確認
多くのドライバで、それぞれの場所で実際に作成可能どうか確認する必要があるでしょう（例：VirtualBox がインストールされているかや、指定する API 証明書が有効かどうか）。Docker Machine は「作成の事前確認」（pre-create check）をドライバごとに⾏えます。
事前確認が成功したら、Docker Machine は通常通り作成⼿順を進⾏します。事前確認に失敗したら、Docker
Machine のプロセスは終了コード 3 で終了します。つまり、ゼロ以外の終了コードを返す場合は、事前作成に失敗したのが分かります。

- 37 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

エンブ

env
docker コマンドの実⾏時に、特定のマシンを指し⽰せるような環境変数を表⽰します。
$ docker-machine env --help
使い方: docker-machine env [オプション] [引数...]
Docker クライアント用の環境変数をセットアップするコマンドを表示
説明:
引数はマシン名。
オプション:--swarm Docker デーモンの代わりに Swarm の設定を表示--shell 環境変数を設定するシェルを指定: [fish, cmd, powershell], デフォルトは sh/bash--unset, -u 環境変数の値を指定せずにリセット--no-proxy マシンの IP アドレスに NO_PROXY 環境変数の追加
docker-machine env マシン名 を実⾏したら、サブシェル上で実⾏可能な export コマンドが表⽰されます。
docker-machine env -u を実⾏したら、この効果を無効化する unset コマンドを表⽰します。
$ env | grep DOCKER$ eval "$(docker-machine env dev)"$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.101:2376
DOCKER_CERT_PATH=/Users/nathanleclaire/.docker/machines/.client
DOCKER_TLS_VERIFY=1
DOCKER_MACHINE_NAME=dev$ # If you run a docker command, now it will run against that host.
$ eval "$(docker-machine env -u)"$ env | grep DOCKER$ # The environment variables have been unset.
上の出⼒は bash や zsh シェル上での実⾏を想定したものです（どのシェルを使っているか分からくても、⼤抵の場合は bash でしょう）。しかし、Docker Machine がサポートしているシェルはこれだけではありません。どのようなコマンドを使うかは、それぞれの環境にあわせる必要があります。現時点では bash、cmd、powershell、emacsのシステムをサポートしています。
もし fish を使っており、SHELL 環境変数が fish のパスを適切に設定しているのであれば、docker-machine env
マシン名 を実⾏したら、fish を想定した形式で値を表⽰します。
set -x DOCKER_TLS_VERIFY 1;
set -x DOCKER_CERT_PATH "/Users/nathanleclaire/.docker/machine/machines/overlay";set -x DOCKER_HOST tcp://192.168.99.102:2376;
set -x DOCKER_MACHINE_NAME overlay# Run this command to configure your shell:# eval "$(docker-machine env overlay)"
docker-machine env コマンドはシェルを⾃動的に検出します。しかし、もし Windows でパワーシェルや cmd.exeを使う場合であれば、⾃動検出できません。そのため、docker-machine env に⾃分で --shell フラグのオプションを上書き指定する必要があります。
- 38 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

パワーシェルの例：$ docker-machine.exe env --shell powershell dev$Env:DOCKER_TLS_VERIFY = "1"$Env:DOCKER_HOST = "tcp://192.168.99.101:2376"$Env:DOCKER_CERT_PATH = "C:\Users\captain\.docker\machine\machines\dev"$Env:DOCKER_MACHINE_NAME = "dev"# Run this command to configure your shell:# docker-machine.exe env --shell=powershell dev | Invoke-Expression
cmd.exe の例：$ docker-machine.exe env --shell cmd dev
set DOCKER_TLS_VERIFY=1
set DOCKER_HOST=tcp://192.168.99.101:2376
set DOCKER_CERT_PATH=C:\Users\captain\.docker\machine\machines\dev
set DOCKER_MACHINE_NAME=dev# Run this command to configure your shell: copy and paste the above values into your command prompt

プ ロキシ を使わずに マシン を作成
env コマンドは --no-proxy フラグをサポートしています。これは、作成するマシンの IP アドレスに NO_PROXY /no_proxy 環境変数を追加します。
インターネットへのアクセスに HTTP プロキシが必要なネットワーク環境では、ローカルの仮想マシン・プロ
バイダ（例：virtualbox や vmwarefusion）で docker-machine を使うのにこれが役⽴ちます。
$ docker-machine env --no-proxy default
export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.104:2376"
export DOCKER_CERT_PATH="/Users/databus23/.docker/machine/certs"
export DOCKER_MACHINE_NAME="default"
export NO_PROXY="192.168.99.104"# Run this command to configure your shell:# eval "$(docker-machine env default)"
また、create ⽤の設定ドキュメントでは、docker-machine create コマンドで作成時に --engine-env フラグでデーモンの HTTP_PROXY を指定する⽅法も参考になるでしょう。

- 39 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

ヘ ル プ

help
使い方: docker-machine help [引数...]
全てのコマンドを表示するか、１つのコマンドのヘルプを表示
使い方: docker-machine help サブコマンド
ヘルプ・テキストを表⽰するには、次のように実⾏します。
$ docker-machine help config
使い方: docker-machine config [オプション] [引数...]マシンに接続する設定を表示
説明:
引数はマシン名。
オプション:--swarm

Docker デーモンの代わりに Swarm の設定を表示- 40 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

インスペクトinspect
使い方: docker-machine inspect [オプション] [引数...]マシンに関する情報を調査
説明:
引数はマシン名。
オプション:--format, -f

go template で指定した出力に整形

デフォルトでは、マシンの情報を JSON 形式で表⽰します。フォーマットを指定すると、特定のテンプレートを使った結果を表⽰します。
Go ⾔語の text/template パッケージのページに、全てのフォーマットに関する情報の説明があります。
text/template 構⽂の他にも、json や prettyjson で JSON 形式の出⼒も可能です（ドキュメントは以下をご覧
ください。
）
。

例
全マシンの 詳細 を表示 ：こちらは inspect のデフォルトの使い⽅です。
$ docker-machine inspect dev{"DriverName": "virtualbox","Driver": {"MachineName":"docker-host-128be8d287b2028316c0ad5714b90bcfc11f998056f2f790f7c1f43f3d1e6eda","SSHPort": 55834,"Memory": 1024,"DiskSize": 20000,"Boot2DockerURL": "","IPAddress": "192.168.5.99"},...
}
マシンの IP ア ドレ スを 取得：
JSON の出⼒結果全体から、適切なフィールドのみを適切に取得できます。
$ docker-machine inspect --format='{{.Driver.IPAddress}}' dev
192.168.5.99
フォーマッ トの 詳細：
JSON 形式として情報のサブセットが欲しい場合は、テンプレートの中で json ファンクションが使えます。
$ docker-machine inspect --format='{{json .Driver}}' dev-fusion{"Boot2DockerURL":"","CPUS":8,"CPUs":8,"CaCertPath":"/Users/hairyhenderson/.docker/machine/certs/ca.
pem","DiskSize":20000,"IPAddress":"172.16.62.129","ISO":"/Users/hairyhenderson/.docker/machine/machi
nes/dev-fusion/boot2docker-1.5.0-GH747.iso","MachineName":"dev-fusion","Memory":1024,"PrivateKeyPath":"/Users/hairyhenderson/.docker/machine/certs/ca-key.pem","SSHPort":22,"SSHUser":"docker","SwarmDis
covery":"","SwarmHost":"tcp://0.0.0.0:3376","SwarmMaster":false}- 41 docs.docker.jp 16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

json 形式は使い易いのですが、⼈間にとって⾮常に読み⾟いです。⼈が読む場合は prettyjson が使えます。
$ docker-machine inspect --format='{{prettyjson .Driver}}' dev-fusion{"Boot2DockerURL": "","CPUS": 8,"CPUs": 8,"CaCertPath": "/Users/hairyhenderson/.docker/machine/certs/ca.pem","DiskSize": 20000,"IPAddress": "172.16.62.129","ISO": "/Users/hairyhenderson/.docker/machine/machines/dev-fusion/boot2docker-1.5.0-GH747.iso","MachineName": "dev-fusion","Memory": 1024,"PrivateKeyPath": "/Users/hairyhenderson/.docker/machine/certs/ca-key.pem","SSHPort": 22,"SSHUser": "docker","SwarmDiscovery": "","SwarmHost": "tcp://0.0.0.0:3376","SwarmMaster": false}- 42 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

ip１つまたは複数マシンの IP アドレスを表⽰します。
$ docker-machine ip dev
192.168.99.104$ docker-machine ip dev dev2
192.168.99.104
192.168.99.105- 43 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

キ ル

kill
使い方: docker-machine kill [引数...]マシンを KILL (強制停止)する。
説明:
引数は１つまたは複数のマシン名
マシンを kill （強制的に即時停⽌）します。
$ docker-machine ls
NAME ACTIVE DRIVER
dev*
virtualbox$ docker-machine kill dev$ docker-machine ls
NAME ACTIVE DRIVER
dev*
virtualbox

STATE
Running

URL
tcp://192.168.99.104:2376

STATE
StoppedURL- 44 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンドls使い方: docker-machine ls [オプション] [引数...]マシン一覧を表示
オプション:--quiet, -q--filter [--filter option --filter option]--timeout, -t "10"--format, -f

静かな (quite) モードを有効化
指定した状況に応じてフィルタを出力
タイムアウトを秒数で指定。デフォルトは 10 秒
Go テンプレートに一致する内容で表示

タイムア ウトls コマンドは各ホストに対し、到達性を並列に確認します。対象のホストが 10 秒間応答しなければ、ls コマン
ドで対象ホストの情報を Timeout 状態として表⽰します。同様の状況（接続が貧弱、⾼負荷、あるいはその他トラ
ブルシューティング）では、値を上下させたくなるでしょう。 -t フラグを使い、整数値で秒数を指定できます。
例$ docker-machine ls -t 12
NAME
ACTIVE DRIVER
default virtualbox

STATE
Running

URL
tcp://192.168.99.100:2376

SWARM

DOCKER
v1.9.0ERRORS

フィ ルタリ ング
フィルタリング・フラグ（ --filter ）の指定は key=value のペア形式です。複数のフィルタを使う場合は、複数のフラグを使います（例： --filter "foo=bar" --filter "bif=baz" ）。
現時点でサポートしているフィルタは次の通りです。

 driver（ドライバ名）
 swarm（swarm のマスタ名）
 state （状態： Running | Paused | Saved | Stopped | Stopping | Starting | Error ） name（ドライバが返すマシン名であり、Go ⾔語形式 の正規表現をサポート）
 label（マシンを--engine-label オプションで作成すると、label=<key>[=<value>] 形式でフィルタできる）
例$ docker-machine ls
NAME ACTIVE DRIVER
dev
virtualbox
foo0 virtualbox
foo1 virtualbox
foo2 *
virtualbox

STATE
StoppedRunning
Running
Running

URL

SWARM

tcp://192.168.99.105:2376
tcp://192.168.99.106:2376
tcp://192.168.99.107:2376$ docker-machine ls --filter name=foo0
NAME ACTIVE DRIVER
STATE
URL
foo0 virtualbox Running tcp://192.168.99.105:2376

DOCKERERRORS

v1.9.1v1.9.1v1.9.1SWARM

DOCKER
v1.9.1ERRORS$ docker-machine ls --filter driver=virtualbox --filter state=Stopped- 45 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

NAME
dev

ACTIVE-DRIVER
virtualbox

STATE
Stopped

4.1 docker machineサブコマンド

URL

SWARM

DOCKER ERRORS
v1.9.1$ docker-machine ls --filter label=com.class.app=foo1 --filter label=com.class.app=foo2
NAME ACTIVE DRIVER
STATE
URL
SWARM DOCKER ERRORS
foo1 virtualbox Running tcp://192.168.99.105:2376
v1.9.1
foo2 *
virtualbox Running tcp://192.168.99.107:2376
v1.9.1

書式
マシンの結果を分かりやすくするため、書式オプション（ --format ）で Go ⾔語のテンプレートが使えます。
以下の Go テンプレートをプレースホルダに指定可能です。
プレースホルダ

説明.Name.Active.ActiveHost.ActiveSwarm.DriverName.State.URL.Swarm.Error.DockerVersion.ResponseTime

マシン名
マシンがアクティブかマシンがアクティブな Swarm のホストではないか
マシンがアクティブな Swarm マスタか
ドライバ名
マシンの状態（実⾏中、停⽌中など）
マシン URL
マシンの Swarm 名
マシンのエラーDocker デーモンのバージョン
ホストの応答時間

ls コマンドで --format オプションを使うと、テンプレートから⾃分が必要なデータだけ出⼒できます。
また table
命令を使うと、ヘッダ部分も調整可能です。
以下の例では Name と Driver のエントリをヘッダ情報無しに表⽰します。
$ docker-machine ls --format "{{.Name}}: {{.DriverName}}"default: virtualbox
ec2: amazonec2
全てのマシン名とドライバを表形式（table format）で表⽰できます。
$ docker-machine ls --format "table {{.Name}} {{.DriverName}}"NAME
DRIVERdefault virtualbox
ec2
amazonec2- 46 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

リ ジ ェ ネ レ ー ト ・ サ ー ツregenerate-certs
使い方: docker-machine regenerate-certs [オプション] [引数...]マシン用の TLS 証明書を再作成
説明:
引数は１つまたは複数のマシン名
オプション:--force, -f 強制的に再作成し、表示しない
TLS 証明書を再作成し、新しい証明書を使うようにマシンの情報を更新します。
例：$ docker-machine regenerate-certs dev
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates- 47 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

リスタート

restart
使い方: docker-machine restart [引数...]
マシンを再起動説明:
引数は１つまたは複数のマシン名
マシンを再起動します。これは docker-machine stop; docker-machine start の実⾏と同等です。
$ docker-machine restart dev
Waiting for VM to start...

- 48 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

rm
マシンを削除（remove）します。ローカル環境から削除するだけでなく、クラウド・プロバイダや仮想化管理プ
ラットフォームからも削除します。
$ docker-machine rm --help
使い方: docker-machine rm [オプション] [引数...]
マシンを削除
説明:
引数は１つまたは複数のマシン名
オプション:--force, -f マシンを削除できなくても、ローカルの設定を削除する。また確認は自動的に `-y` を選択-y
削除時の確認で、入力プロンプトを表示せず、自動的に yes を選択
例：$ docker-machine ls
NAME ACTIVE URL
barvirtualbox
baz
virtualbox
foo
virtualbox
qix
virtualbox

STATE
Running
Running
Running
Running

URL
tcp://192.168.99.101:2376
tcp://192.168.99.103:2376
tcp://192.168.99.100:2376
tcp://192.168.99.102:2376

SWARM

DOCKER
v1.9.1v1.9.1v1.9.1v1.9.1ERRORS

STATE
Running
Running
Running

URL
tcp://192.168.99.101:2376
tcp://192.168.99.100:2376
tcp://192.168.99.102:2376

SWARM

DOCKER
v1.9.1v1.9.1v1.9.1ERRORS

STATE
Running

URL
tcp://192.168.99.100:2376

SWARM

DOCKER
v1.9.1ERRORS$ docker-machine rm baz
About to remove baz
Are you sure? (y/n): y
Successfully removed baz$ docker-machine ls
NAME ACTIVE URL
barvirtualbox
foo
virtualbox
qix
virtualbox$ docker-machine rm bar qix
About to remove bar, qix
Are you sure? (y/n): y
Successfully removed bar
Successfully removed qix$ docker-machine ls
NAME ACTIVE URL
foovirtualbox$ docker-machine rm -y foo
About to remove foo
Successfully removed foo- 49 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

scp
scp を使い、ローカル・ホストからマシンにファイルをコピーします。あるいは、マシンからマシンへ、マシン
からローカルホストへコピーします。
引数の表記法は マシン名:/path/to/files（ファイルへのパス）です。対象がホストマシン上であれば、マシン名を指定せずに、パスのみを指定します。
次の例を考えてみます：$ cat foo.txt
cat: foo.txt: No such file or directory$ docker-machine ssh dev pwd/home/docker$ docker-machine ssh dev 'echo A file created remotely! >foo.txt'$ docker-machine scp dev:/home/docker/foo.txt .
foo.txt$ cat foo.txt
A file created remotely!

100%

28

0.0KB/s

00:00

scp で -r フラグを使うと、再帰的にファイルをコピーします。この機能を docker-machine で使うには -r フラ
グを使います。
マシンからマシンへファイルを転送する場合は、ローカル・ホスト上のファイルシステムを経由する必要があります（ scp の -3 フラグ）を使います。

- 50 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

ssh
SSH でマシンにログインするか、コマンドを実⾏します。
ログインするには、 docker-machine ssh マシン名 を実⾏するだけです。
$ docker-machine ssh dev##.
## ## ##==## ## ## ##===/""""""""""""""""\___/ ===~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~\______ o
__/
\
\
__/
\____\______/__ ______| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ ||_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.4.0, build master : 69cf398 - Fri Dec 12 01:39:42 UTC 2014
docker@boot2docker:~$ ls /Users/ dev/
home/
lib/
mnt/
proc/
run/
sys/
usr/
bin/
etc/
init
linuxrc opt/
root/
sbin/
tmp
var/
docker-machine ssh コマンドは通常の ssh プログラムが動作するように、リモートで直接実⾏するコマンドを指定することも可能です。
$ docker-machine ssh dev free
total
used
Mem:
1023556
183136-/+ buffers:
152216
Swap:
12120360

free8404208713401212036

shared0

buffers
30920

コマンドに対するフラグも、同様に動作します。
$ docker-machine ssh dev df -hFilesystemSizerootfs
899.6M
tmpfs
899.6M
tmpfs
499.8M/dev/sda1
18.2G
cgroup499.8M/dev/sda1
18.2G/mnt/sda1/var/lib/docker/aufs

Used Available Use% Mounted on
85.9M
813.7M 10% /85.9M
813.7M 10% /0499.8M 0% /dev/shm
58.2M
17.2G 0% /mnt/sda1
0499.8M 0% /sys/fs/cgroup
58.2M
17.2G 0%

「外部の」SSH タイプを使う場合の詳細については、次のセクションで説明します。 ssh バイナリを実⾏する
コマンドには（Docker Machine によって作成されるコマンドと衝突しない限り）追加オプションを設定できます。
例えば、次のコマンドは default マシンから⾃分のホスト・コンピュータ上の localhost に対して、ポート 8080に転送するコマンドです。
$ docker-machine ssh default -L 8080:localhost:8080- 51 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

異 なる種 類の SSH
Docker Machine が呼び出される時、伝統的な ssh バイナリがローカルにあるかどうか確認し、SSH コマンドを使う必要があれば、これを使おうとします。使う場⾯とは、create 時のような内部処理か、利⽤者が必要な時に明⽰するかどうかに拘わりません。外部の ssh バイナリがローカルに存在しなければ、Go ⾔語内蔵の crypto/ssh*1 を使おうとします。これは伝統的な UNIX ツールが利⽤できない環境で便利になるでしょう。例えば、Windows 上
で Docker Machine を使う時に、msysgit がインストールされていなくても使えます。
多くの場合、実装の詳細について考慮する必要はありません。Docker Machine は難しい設定をしなくても利⽤できます。しかし、Go ネイティブ・バージョンを敢えて使おうとする場合は、グローバルなコマンドライン上のフラグ、または、環境変数の指定が必要です。
$ docker-machine --native-ssh ssh dev
２つの⼿法は様々なパターンを伴いますので、何らかの問題や⼀貫性が無い場合があれば、ご報告ください。

*1 https://godoc.org/golang.org/x/crypto/ssh- 52 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

スタート

start
使い方: docker-machine start [引数...]
マシンを起動説明:
引数は１つまたは複数のマシン名
マシンを起動します。
$ docker-machine start dev
Starting VM...

- 53 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

ステータス

status使い方: docker-machine status [引数...]マシンの状態を取得
説明:
引数はマシン名
マシンのステータス（状態）を取得します。
$ docker-machine status dev
Running- 54 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

ストップ

stop
使い方: docker-machine stop [引数...]マシンを丁寧に (Gracefully) に停止
説明:
引数は１つまたは複数のマシン名
マシンを丁寧に（gracefully）停⽌します。
$ docker-machine ls
NAME ACTIVE DRIVER
dev*
virtualbox$ docker-machine stop dev$ docker-machine ls
NAME ACTIVE DRIVER
dev*
virtualbox

STATE
Running

URL
tcp://192.168.99.104:2376

STATE
StoppedURL- 55 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

アップグレード

upgrade
マシンを Docker の最新バージョンにアップグレードします。どのようにアップグレードをするかは、インスタンス作成に⽤いたディストリビューションに依存します。
たとえば、動作するオペレーティング・システムを Ubuntu としてマシンを起動している場合、Docker Machine
は Ubuntu マシンのパッケージを管理しているとみなすため、sudo apt-get upgrade docker-engine のようなコマ
ンドを実⾏します。
$ docker-machine upgrade default
Stopping machine to do the upgrade...
Upgrading machine default...
Downloading latest boot2docker release to /home/username/.docker/machine/cache/boot2docker.iso...
Starting machine back up...
Waiting for VM to start...

- 56 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

4.1 docker machineサブコマンド

url
ホストの URL を取得します。
$ docker-machine url dev
tcp://192.168.99.109:2376- 57 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.1 サポートしているドライバ

5章

5 章 Machine ドライバ・リファレンス

5.1 サポートしているドライバ
 Amazon Web Services
 Microsoft Azure Digital Ocean exoscale Google Compute Engine 汎⽤(generic)ドライバ
 Microsoft Hyper-V
 OpenStack rackspace IBM SoftLayer Oracle VirtualBox
 vm-cloud vm-fusion
 vsphere- 58 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.2 ドライバのオプションとデフォルトOS

5.2 ドライバのオプションとデフォルト OS
ローカル・ネットワーク・プロバイダ、あるいはリモート環境、そして Amazon Web Services のようなクラウ
ド・プロバイダ上において、Docker Machine がコンテナをプロビジョニングする場合は、プロバイダに対応したドライバと、ベースとなるオペレーティング・システムの両⽅を定義する必要があります。10 を越えるサポート済みドライバと、その他のプロバイダ上にマシンを追加する generic （ジェネリック）ドライバがあります。
各ドライバは、各プロバイダ固有のオプション群を持っています。これらのオプションはマシンに対する情報を提供するものです。たとえば、接続時に必要となる認証情報（credential）、ポート番号などがあります。
例えば、Azure マシンを作成するには、ポータル上でサブスクリプション ID を取得してから、docker-machine
create を次のように実⾏します。
$ docker-machine create -d azure \--azure-subscription-id="SUB_ID" --azure-subscription-cert="mycert.pem" A-VERY-UNIQUE-NAME
プロバイダの⼀覧や、各プロバイダで利⽤できるオプション⼀覧を確認するには、Docker Machine ドライバ・
リファレンスをご覧ください。
プロバイダに加え、ベース・オペレーティング・システムごとに固有のオプションを指定できます。しかし、Docker machine はローカル・リモートの各プロバイダに対するデフォルト指定を持っているため、オプション指定は任意です。VirtualBox、Fusion、Hyper-V 等のようなローカル・プロバイダでは、デフォルトのベース・オペ
レーティング・システムは Boot2Docker です。クラウド・プロバイダ向けのベース・オペレーティング・システ
ムは、プロバイダが提供している最新の Ubuntu LTS です。
オペレーティング・システム

バージョン

メモ

Boot2Docker
UbuntuRancherOS
DebianRed Hat Enterprise LinuxCentOS
Fedora1.5+
12.04+
0.3+
8.0+
7.0+
7.0+
21+

ローカル⽤のデフォルト
リモート⽤のデフォルト
実験的(experimental)
実験的(experimental)
実験的(experimental)
実験的(experimental)

リモート・プロバイダ上で異なったベース・オペレーティング・システムを使うには、プロバイダのイメージ・
フラグと利⽤可能なイメージの指定が必要になります。例えば、DigitalOcean で debian-8-x64 イメージを指定す
るには、 --digitalocean-image=debian-8-x64 フラグが必要です。
プロバイダ⽤のベース・イメージを変更する時、SSH ユーザの変更も必要になる場合があります。例えば、EC2
上のデフォルト Red Hat AMI の SSH ユーザは ec2-user ですので、 --amazonec2-ssh-user ec2-user と指定する必要があります。

- 59 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.3 Amazon Web Services

5.3 Amazon Web Services
Amazon Web Services 上にマシンを作成します。

認証ファイルの設定
AWS 認 証情報 ファイル
amazonec2 ドライバを使う前に、認証情報の設定が必要です。
認証情報を設定する１つの⽅法は、Amazon AWS ⽤の認証情報をファイル ~/.aws/credentials に置くことです。次のような書式です。
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
Mac や Linux ディストリビューションでは、AWS コマンドライン・インターフェース（ aws cli ）をターミナ
ルにインストールし、aws configure コマンドで認証情報ファイルを作成します。
これが最も簡単にマシンを作成できる⽅法です。
$ docker-machine create --driver amazonec2 aws01

コ マンド ライン のフ ラグ
他には、コマンドライン上で--amazonec2-access-key と--amazonec2-secret-key フラグを使う⽅法があります。
$ docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key
8T93C******* aws01

環 境変数
環境変数も使えます。
$ export AWS_ACCESS_KEY_ID=AKID1234567890$ export AWS_SECRET_ACCESS_KEY=MY-SECRET-KEY$ docker-machine create --driver amazonec2 aws01
オプション --amazonec2-access-key : 必須 ⾃分の Amazon Web Services API ⽤のアクセス・キー緒です。
 --amazonec2-secret-key : 必須 ⾃分の Amazon Web Services API ⽤のシークレット・アクセスキーです。
 --amazonec2-session-token : ⾃分の Amazon Web Services API ⽤のセッション・トークンです。
 --amazonec2-ami : インスタンスに使⽤する AMI ID です。
 --amazonec2-region : インスタンスを起動するリージョンです。
 --amazonec2-vpc-id : 必須 起動したインスタンスを置く VPC ID です。
 --amazonec2-zone : インスタンスを置く AWS ゾーンです（例： a, b, c, d, e のいずれか）。
 --amazonec2-subnet-id : AWS VPC サブネット ID です。
 --amazonec2-security-group : AWS VPC セキュリティ・グループ名です。
 --amazonec2-tags : AWS タグをキーバリューのペアで指定します（カンマ区切りです。例：- 60 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.3 Amazon Web Services

key1,value1,key2,value2）。
 --amazonec2-instance-type : 実⾏するインスタンス・タイプです。
 --amazonec2-device-name : 実⾏するデバイス名です。
 --amazonec2-root-size : インスタンスのルート・ディスク容量（単位：GB）。
 --amazonec2-volume-type : インスタンスにアタッチする Amazon EBS の種類を指定。
 --amazonec2-iam-instance-profile : インスタンスのプロフィールに使われる AWS IAM ロール名。
 --amazonec2-ssh-user : SSH ログイン・ユーザ名です。ここには AMI が使うデフォルトの SSH ユーザを⼀致する必要があります。
 --amazonec2-request-spot-instance : スポット・インスタンスを使⽤。
 --amazonec2-spot-price : ス ポ ッ ト ・ イ ン ス タ ン ス の bid 価 格 （ 単 位 ： ド ル ）。
--amazonec2-request-spot-instance フラグが必要です。
 --amazonec2-use-private-addressce : docker-machine の通信にプライベート IP アドレスを使います。ですがパブリックな IP アドレスも作成されます。
 --amazonec2-private-address-only : プライベート・アドレスのみ使います。
 --amazonec2-monitoring : CloudWatch モニタリングを有効化します。
 --amazonec2-user-ebs-optimized-instance : EBS 最適化インスタンスを作成します。インスタンス・タイ
プが対応している必要があります。
 --amazonec2-ssh-keypath : インスタンス⽤のプライベート・キーに使うファイルのパスを指定します。対
応する公開鍵の拡張⼦は .pub になっている必要があります。
環境変数とデフォルト値は以下の通りです。
コマンドライン・オプション

環境変数--amazonec2-access-key--amazonec2-secret-key--amazonec2-session-token--amazonec2-ami--amazonec2-region--amazonec2-vpc-id--amazonec2-vpc-id--amazonec2-zone--amazonec2-subnet-id--amazonec2-security-group--amazonec2-instance-type--amazonec2-device-name--amazonec2-root-size--amazonec2-volume-type--amazonec2-iam-instance-profile--amazonec2-ssh-user--amazonec2-request-spot-instance--amazonec2-spot-price--amazonec2-user-private-address--amazonec2-private-address-only--amazonec2-monitoring--amazonec2-use-ebs-optimized-instance--amazonec2-ssh-keypath

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKENAWS_AMIAWS_DEFAULT_REGIONAWS_VPC_ID
AWS_VPC_ID
AWS_ZONEAWS_SUBNET_IDAWS_SECURITY_GROUPAWS_INSTANCE_TYPEAWS_DEVICE_NAMEAWS_ROOT_SIZEAWS_VOLUME_TYPE
AWS_INSTANCE_PROFILEAWS_SSH_USER

デフォルト値

ami-5f709f34
us-east-1

adocker-machine
t2.micro/dev/sda
16
gp2
ubuntu
false
0.50
false
false
false
false

AWS_SSH_KEYPATH- 61 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.3 Amazon Web Services

デフォルト AMI
デフォルトでは、Amazon EC2 ドライバは Ubuntu 15.10 LTS の daily イメージを使います。
リージョン

AMI ID

ap-northeast-1
ap-southeast-1
ap-southeast-2
cn-north-1
eu-west-1
eu-central-1
sa-east-1
us-west-1
us-west-1
us-west-2
us-gov-west-1

ami-b36d4edd
ami-1069af73
ami-1d336a7e
ami-79eb2214
ami-8aa67cf9
ami-ab0210c7
ami-185de774
ami-26d5af4c
ami-9cbcd2fc
ami-16b1a077
ami-b0bad893

セキュリティ・グル ープ
セキュリティ・グループが作成され、ホストに関連付けられるのでご注意ください。セキュリティ・グループは
以下のインバウンド通信を許可します。

 ssh (22/tcp)
 docker (2376/tcp)
 swarm (3376/tcp) ノードが Swarm マスタの場合のみです
これポート以外にポートを開くには、 --amazonec2-security-group フラグを使って⾃分でセキュリティ・グル
ープを指定し、ポートが開かれたか確認します。特定のアプリケーションが必要とするポートを開きたい場合は、AWS コンソールで設定を調整ください。

VPC ID
コマンドを実⾏する前に、⾃分のデフォルト VPC を確認します。時々、デフォルトの VPC がなかったり、あるいはデフォルトの VPC を使いたくない場合があるでしょう。VPC を指定するには --amazonec2-vpc-id フラグを使います。
VPC ID を確認するには：
1. AWS コンソールにログインします。
2. Services -> VPC -> VPC -> 自分の VPC に移動します。
3. VPC 列から使⽤する VPC ID を選びます。
4. Services -> VPC -> Subnets に移動します。Availability Zones 列を確認し、ゾーン a が存在しているのと、⾃分の VPC ID と⼀致していることを確認します。
例えば、us-east-1-a にはアベイラビリティ・ゾーン a が存在しています。もし a ゾーンが表⽰されなければ、マシンを作成するために、新しいサブネットを作成するか別のゾーンを指定します。
マシン・インスタンスを作成するには、 --driver amazonec2 と３つの必須パラメータを指定します。

- 62 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.3 Amazon Web Services$ docker-machine create --driver amazonec2 \--amazonec2-access-key AKI******* \--amazonec2-secret-key 8T93C********* \--amazonec2-vpc-id vpc-****** \aws01
この例では、VPC ID が a アベイラビリティ・ゾーンに存在しているものと想定されます。 a ゾーン以外を指定するには、 --amazonec2-zone フラグを使います。例えば、 --amazonec2-zone c は us-east1-c を表しています。

VPC の接続性
Machine は SSH を使い EC2 インスタンス上にセットアップします。その時、インスタンスに直接接続できるよ
うにする必要があります。
フラグ --amazonec2-private-address-only を使うときは、VPC の内部ネットワーク内で新しいインスタンスを作成できるようにする必要があります（例：社内の VPN から VPC の接続、VPC 内の VPN インスタンス、VPC
内で Docker Machine インスタンスを使う）。

VPC セットアップ
VPC の設定はこのドキュメントの範囲外ですが、トラブルシューティングの始めのステップとして、AWS VPC
ユーザガイド*1 のガイダンスから、NAT の利⽤に関する情報をご覧ください。インターネットに接続するためのセットアップに関する、全ての⼿順が書かれています。

カ スタム AMI と SSH ユーザ 名
デフォルト AMI ⽤のデフォルト SSH ユーザ名は ubuntu です。
カスタム AMI が異なった SSH ユーザ名を使っている場合、この SSH ユーザ名の設定を変更する必要があります。
--amazonec2-ami で指定した AMI が必要とする SSH ユーザ名を --amazonec2-ssh-user で指定します。

*1 http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Scenario2.html- 63 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.4 Digital Ocean

5.4 Digital Ocean
Digital Ocean 上に Docker マシンを作成します。
Digital Ocean のコントロール・パネルにある「Apps & API」から、パーソナル・アクセス・トークンを作成する必要があります。それから docker-machine create に --digitalocean-access-token オプションで渡します。
$ docker-machine create --driver digitalocean \--digitalocean-access-token=aa9399a2175a93b17b1c86c807e08d3fc4b79876545432a629602f61cf6ccd6b \test-this
オプション：--digitalocean-access-token : 必須 Digital Ocean API ⽤のパーソナル・アクセス・トークン。
--digitalocean-image : Digital Ocean イメージ⽤の名前。
--digitalocean-region : ドロップレットを作成するリージョンの指定です。詳細⼀覧は Region API*1 を参照。
--digitalocean-size : Digital Ocean ドロップレットのサイズ（ デフォルトの 2gb 以上より⼤きいもの ）。
--digitalocean-ipv6 : ドロップレットで IPv6 を有効化。
--digitalocean-private-networking : ドロップレットのプライベート・ネットワーク対応を有効化。
--digitalocean-backups : ドロップレットのバックアップを有効化。
--digitalocean-userdata : ドロップレット⽤のユーザ・データを含むファイルのパス。
--digitalocean-ssh-user : SSH ユーザ名。
--digitalocean-ssh-port : SSH ポート番号。
--digitalocean-ssh-key-fingerprint : 新しい SSH 鍵を作らず、既存の鍵を使います。詳細は SSH Keys のペー*2

ジ をご覧ください。
DigitalOcean ドライバは、ubuntu-15-10-x64 をデフォルトのイメージとして使います。
利⽤可能な環境変数とデフォルト値は以下の通りです。
コマンドライン・オプション

環境変数

デフォルト値--digitalocean-access-token--digitalocean-image--digitalocean-region--digitalocean-size--digitalocean-ipv6--digitalocean-private-networking

DIGITALOCEAN_ACCESS_TOKENDIGITALOCEAN_IMAGE
DIGITALOCEAN_REGIONDIGITALOCEAN_SIZEDIGITALOCEAN_IPV6
DIGITALOCEAN_PRIVATE_NETWORKING

ubuntu-15-10-x64
nyc3
512mb
false

--digitalocean-backups--digitalocean-userdata--digitalocean-ssh-user--digitalocean-ssh-port--digitalocean-ssh-key-fingerprint

DIGITALOCEAN_BACKUPSDIGITALOCEAN_USERDATA
DIGITALOCEAN_SSH_USER
DIGITALOCEAN_SSH_PORT
DIGITALOCEAN_SSH_KEY_FINGERPRINT

false
false
root
22

*1 https://developers.digitalocean.com/documentation/v2/#regions*2 https://developers.digitalocean.com/documentation/v2/#ssh-keys- 64 -

docs.docker.jp

16/05/21

5.5 generic（汎用）ドライバ
既存の仮想マシン/ホストを、SSH 経由で Docker Machine が扱えるマシンにします。
これが役⽴つのは、Docker Machine のプロバイダがサポートされていない場合や、既存の Docker ホスト環境
を Docker Machine で管理できるよう移⾏する場合です。
作成時、ドライバは以下の処理を⾏います。

 ホスト上で docker が動いていなければ、⾃動的にインストールを⾏う。
 ホスト上のパッケージを更新します（ apt-get update yum update ... ） docker デーモンを安全にする証明書を⽣成する。
 docker デーモンを再起動するため、実⾏中のコンテナは全て停⽌される。
 ホスト名がマシン名に対応します。

例
マシン・インスタンスを作成するには、--driver generic を指定します。
また、ホストの IP アドレスまたは DNS
名と、ホストに接続できるようにするための SSH 秘密鍵も指定します。
$ docker-machine create \--driver generic \--generic-ip-address=203.0.113.81 \--generic-ssh-key=~/.ssh/id_rsa \vm

パスワードで保護された SSH 鍵
SSH 認証情報の指定（ --generic-ssh-key フラグを使う ）がなければ、SSH エージェントは（実⾏中であれば）訊ねます。つまり、パスワードで保護された SSH 鍵を簡単に使えるようにします。
ただしサポートされているのは、外部の SSH クライアント、ここでは ssh バイナリが実⾏できるデフォルトの挙動が扱える場合のみです。ネイティブ・クライアントを使う場合（ --native-ssh ）は、まだ SSH エージェントの利⽤をサポートしていませんのでご注意ください。
$ docker-machine create \--driver generic \--generic-ip-address=203.0.113.81 \othersudo 権限ホストに SSH 接続できるユーザを指定するには --generic-ssh-user フラグを使います。この時、指定したユー
ザはパスワード⼊⼒なしに sudo を実⾏する権限が必要です。もしそのようになっていなければ、 sudoers ファイ
ルを編集し、そのユーザに NOPASSWD としての調整が必要になります。詳しくはドキュメント*1 をご覧ください。

*1 https://help.ubuntu.com/community/Sudoers- 65 -

docs.docker.jp

16/05/21

オプション --generic-engine-port : Docker デーモンが使うポート番号（メモ：このフラグは boot2docker では機能しません）
 --generic-ip-address : 必須 ホストの IP アドレス
 --generic-ssh-key : SSH ユーザのプライベート鍵のパス --generic-ssh-user : 接続に使う SSH ユーザ名
 --generic-ssh-port : SSH に使うポート番号
Docker Machine がサポートしているベース・オペレーティング・システムを使う必要があります。

利⽤可能な環境変数とデフォルト値は以下の通りです。
コマンドライン・オプション

環境変数

デフォルト値--generic-engine-port--generic-ip-address--generic-ssh-key--generic-ssh-user--generic-ssh-port

GENERIC_ENGINE_PORTGENERIC_IP_ADDRESSGENERIC_SSH_KEY
GENERIC_SSH_USER
GENERIC_SSH_PORT

2376―（ssh-agent に従う）
root
22

- 66 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.6 IBM SoftLayer

5.6 IBM SoftLayer
SoftLayer 上にマシンを作成します。
SoftLayer コントロール・パネルで API を⽣成する必要があります。API Key を取得するにはドキュメント*1 をご覧ください。 。
$ docker-machine create --driver softlayer --softlayer-user=user --softlayer-api-key=KEY--softlayer-domain=domain vm
オプション：

 --softlayer-memory : ホストのメモリを MB 単位で指定。
 --softlayer-disk-size : 0 の値を指定すると、SoftLayer のデフォルトを使⽤。
 --softlayer-user : 必須 SoftLayer アカウントのユーザ名であり、API キーと⼀致する必要がある。
 --softlayer-api-key : 必須 ユーザ・アカウント⽤の API キー。
 --softlayer-region : SoftLayer のリージョン。
 --softlayer-cpu : マシンで使う CPU 数。
 --softlayer-hostname : マシンのホスト名。
 --softlayer-domain : 必須 マシンのドメイン名。
 --softlayer-api-endpoint : SoftLayer API エンドポイントの変更。
 --softlayer-hourly-billing : 時間単位（hourly）課⾦を指定すべき。そうしなければ、⽉単位で課⾦される。
 --softlayer-local-disk : SoftLayer SAN のかわりに、ローカル・マシンを使う。
 --softlayer-private-net-only : パブリック・ネットワークを無効化する。
 --softlayer-image : 使⽤する OS イメージ。
 --softlayer-public-vlan-id : パブリック VLAN ID 。
 --softlayer-private-vlan-id : プライベート VLAN ID 。
SoftLayer ドライバは、デフォルトで UBUNTU_LATEST イメージ・タイプを使います。
利⽤可能な環境変数とデフォルト値は以下の通りです。
コマンドライン・オプション

環境変数

デフォルト値--softlayer-memory--softlayer-disk-size--softlayer-user--softlayer-api-key--softlayer-region--softlayer-cpu--softlayer-hostname--softlayer-domain--softlayer-api-endpoint--softlayer-hourly-billing--softlayer-local-disk--softlayer-private-net-only

SOFTLAYER_MEMORYSOFTLAYER_DISK_SIZESOFTLAYER_USERSOFTLAYER_API_KEY
SOFTLAYER_REGIONSOFTLAYER_CPU
SOFTLAYER_HOSTNAMESOFTLAYER_DOMAINSOFTLAYER_API_ENDPOINT
SOFTLAYER_HOURLY_BILLINGSOFTLAYER_LOCAL_DISKSOFTLAYER_PRIVATE_NET

1024
0

dal01
1
dockerapi.softlayer.com/rest/v3
false
false
false

*1 http://knowledgelayer.softlayer.com/procedure/retrieve-your-api-key- 67 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1--softlayer-image--softlayer-public-vlan-id--softlayer-private-vlan-id

5.6 IBM SoftLayer

SOFTLAYER_IMAGEUBUNTU_LATESTSOFTLAYER_PUBLIC_VLAN_ID
0
SOFTLAYER_PRIVATE_VLAN_IDT 0- 68 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.7 Microsoft Azure

5.7 Microsoft Azure
Microsoft Azure 上にマシンを作成します。
証明書（cert）を使ってサブスクリプションを作成する必⽤があります。これらのコマンドを実⾏し、問い合わせに回答します。
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem$ openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate"$ openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer
Azure ポータルに移動し、「Settings」ページに移動します（左スライド・バーの下の⽅にリンクがあります。ス
クロールが必要かもしれません）。それから「Management Certiﬁcates」で mycert.cer からアップロードします。
ポータルから⾃分のサブスクリプション ID を取得し、次のように docker-machine create の詳細を実⾏します。
$ docker-machine create -d azure \--azure-subscription-id="SUB_ID" --azure-subscription-cert="mycert.pem" A-VERY-UNIQUE-NAME
Azure ド ラ イ バ は 、 デ フ ォ ル ト で
b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-15_10-amd64-server-20151116.1-en-us-30GB イメージを使います。
なお、このイメージは中国リージョンでは利⽤できません。中国リージョンは
b549f4301d0b4295b8e76ceb65df47d4__Ubuntu-15_10-amd64-server-20151116.1-en-us-30GB をご利⽤ください。
OS を確実に更新するためには、仮想マシンに SSH でログインし、再起動する必要があるでしょう。
オプション：

 --azure-docker-port : Docker デーモンのポート番号。
 --azure-image : Azure イメージ名です。詳細は How to: Get the Windows Azure Image Name*1 を参照。
 --azure-location : マシン・インスタンスの場所。
 --azure-password : Azure パスワード。
 --azure-publish-settings-file : Azure 設定ファイル。詳細は How to: Download and Import Publish
Settings and Subscription Information *2 を参照。
 --azure-size : Azure ディスク容量。
 --azure-ssh-port : Azure SSH ポート番号。
 - - a z u re - s ub s cr i pt i o n- i d : 必 須 A z u r e サ ブ ス ク リ プ シ ョ ン I D（ G U I D はd255d8d7-5af0-4f5c-8a3e-1545044b861e のようなものです ）.
 --azure-subscription-cert : 必須 Azure サブスクリプション証明書（cert）。
 --azure-username : Azure ログイン・ユーザ名。
利⽤可能な環境変数とデフォルト値は以下の通りです。

*1 https://msdn.microsoft.com/en-us/library/dn135249%28v=nav.70%29.aspx*2 https://msdn.microsoft.com/en-us/library/dn385850%28v=nav.70%29.aspx- 69 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

コマンドライン・オプション--azure-docker-port--azure-image--azure-location--azure-password--azure-publish-settings-file--azure-size--azure-ssh-port--azure-subscription-cert--azure-subscription-id--azure-username

5.7 Microsoft Azure

環境変数

デフォルト値AZURE_IMAGE
AZURE_LOCATION

2376
Ubuntu 15.10 x64
West USAZURE_PUBLISH_SETTINGS_FILE
AZURE_SIZE

Small
22

AZURE_SUBSCRIPTION_CERTAZURE_SUBSCRIPTION_ID
ubuntu- 70 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.8 Oracle VirtualBox

5.8 Oracle VirtualBox
VirtualBox を使い、ローカルにマシンを作成します。このドライバを使うには、ホスト上に VirtualBox 5 以上のインストールが必要です。VirtualBox 4 の場合は動作するかもしれませんが、警告が出ます。それよりも古いバー
ジョンは実⾏できません。
$ docker-machine create --driver=virtualbox vbox-test
完全に新しいマシンを作成するか、Boot2Docker 仮想マシンにあるデータを変換して仮想マシンに取り込めます。
Boot2Docker 仮想マシンを変換するには、以下のコマンドを実⾏します。
$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm b2d
オプション：

 --virtualbox-memory : ホストのメモリ容量を MB 単位で指定。
 --virtualbox-cpu-count : 作成する仮想マシンが使う CPU 数。デフォルトは CPU １つ。
 --virtualbox-disk-size : ホストのディスク容量を MB 単位で指定。
 --virtualbox-host-dns-resolver : ホス DN レゾルバの使⽤（Boolean 値で、デフォルトは false）。
 --virtualbox-boot2docker-url : boot2docker イメージの URL を指定。デフォルトは利⽤可能な最新バー
ジョン。
 --virtualbox-import-boot2docker-vm : 取り込む Boot2Docker 仮想マシンの名前。
 --virtualbox-hostonly-cidr : ホストオンリー・アダプタの CIDR 。
 --virtualbox-hostonly-nictype : ホストオンリー・ネットワーク・アダプタのタイプを指定。値は82540EM (Intel PRO/1000)、 Am79C973 (PCnet-FAST III) 、virtio-net 準仮想化ネットワーク・アダプタのいずれか。
 --virtualbox-hostonly-nicpromisc : ホスト・オンリー・ネットワーク・アダプタのプロミスキャス・モ
ードを指定。オプションは deny、allow-vms、allow-all のいずれか。
 --virtualbox-no-share : ホーム・ディレクトリのマウントを無効化。
 --virtualbox-no-dns-proxy : 全ての DNS リクエストをホスト側にプロキシしない（ Boolean 値で、デフォルトは false）。
 --virtualbox-no-vtx-check : 仮想マシンを起動する前にハードウェア仮想化が利⽤可能かどうかを確認。
--virtualbox-boot2docker-url フラグには、いくつかの異なった使い⽅があります。デフォルトでは、フラグに値を何も指定しなければ、Docker Machine はローカルの boot2docker ISO を探します。もしローカル上に⾒つかれば、マシン作成⽤の ISO として⽤いられます。もし⾒つからない場合は、boot2docker/boot2docker*1 にある最新の ISO イメージをダウンロードし、ローカルに保存してから使います。つまり、ローカルに「キャッシュされた」
boot2docker ISO を更新したい場合は、docker-machine upgrade を実⾏しなくてはいけません。
これはデフォルトの挙動（ --virtualbox-boot2docker-url="" を指定 ）ですが、オプションで ISO を http://
や file:// プロトコルで指定することもサポートされています。 file:// はローカルに置かれている ISO イメー
ジのパスを探します。例えば、 --virtualbox-boot2docker-url file://$HOME/Downloads/rc.iso を指定すると、リリース候補のダウンロード済み ISO を確認します。あるいは、 http:// 形式を使い、インターネットの ISO を直接指定できます。

*1 https://github.com/boot2docker/boot2docker- 71 -

docs.docker.jp

16/05/21

Docker Machine ユーザガイド v0.7 - beta1

5.8 Oracle VirtualBox

ホスト・オンリー・アダプタをカスタマイズするには、 --virtualbox-hostonly-cidr フラグを使えます。ここでホスト IP を指定すると、Machine は VirtualBox DHCP サーバ・アドレスを計算（ .1 〜 .25 までのサブネッ
ト上の、ランダムな IP）するので、指定したホスト IP と衝突しないようにします。また、Machine は⾃動的に最⼩ .100 〜最⼤ .254 までの間で DHCP を指定します。たとえば、CIDR 192.168.24.1/24 を指定すると、DHCP
サーバは 192.168.24.2-25 になり、IP アドレスの範囲は最⼩ 192.168.24.100 から最⼤ 192.168.24.254 となります。
利⽤可能な環境変数とデフォルト値は以下の通りです。
コマンドライン・オプション

環境変数

デフォルト値--virtualbox-memory--virtualbox-cpu-count--virtualbox-disk-size--virtualbox-host-dns-resolver--virtualbox-boot2docker-url--virtualbox-import-boot2docker-vm--virtualbox-hostonly-cidr--virtualbox-hostonly-nictype--virtualbox-hostonly-nicpromisc--virtualbox-no-share--virtualbox-no-dns-prox--virtualbox-no-vtx-check

VIRTUALBOX_MEMORY_SIZE
VIRTUALBOX_CPU_COUNTVIRTUALBOX_DISK_SIZE
VIRTUALBOX_HOST_DNS_RESOLVER
VIRTUALBOX_BOOT2DOCKER_URL
VIRTUALBOX_BOOT2DOCKER_IMPORT_VM
VIRTUALBOX_HOSTONLY_CIDR
VIRTUALBOX_HOSTONLY_NIC_TYPE
VIRTUALBOX_HOSTONLY_NIC_PROMISC
VIRTUALBOX_NO_SHAREVIRTUALBOX_NO_DNS_PROXYVIRTUALBOX_NO_VTX_CHECK

1024
1
20000
false
最新の boot2docker url
boot2docker-vm
192.168.99.1/24
82540EM
deny
false
false
false

]既知の問題Vboxfs は longstanding bug*1 により、キャッシュされたファイル内容を提供するため sendﬁle(2)*2 を引き起こします。
これにより、nginx のようなウェブ・サーバが共有ボリュームから静的ファイルを読み込むとき、問題を引き起こしがちです。開発環境では、サーバの設定で sendﬁle を無効化するのが良いでしょう。

*1 https://www.virtualbox.org/ticket/9069* 2 h t t p : / / l i n u x . d i e . n e t / m a n / 2 / s e n d fi l e- 72 -

docs.docker.jp

16/05/21