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-machinecreate コマンドには全てのドライバで適用できる共通のフラグがあります。主に、マシンのプロビジョニング手順における挙動を制御するもので(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-driver engine が使うストレージ・ドライバの指定 --engine-env [--engine-env option --engine-env option] engine で使う環境変数を指定 --swarm Swarm と Machine を使う設定 --swarm-image "swarm:latest" Swarm が使う Docker イメージの指定 [$MACHINE_SWARM_IMAGE] --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-typem1.medium )や地理的なリージョン( --amazonec2-regionus-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-driver engine が使うストレージ・ドライバの指定 --swarm Swarm と Machine を使う設定 --swarm-addr Swarm のアドバタイズ・アドレス (デフォルト: 検出、もしくはマシン IP を使用) --swarm-discovery Swarm で使うディスカバリ・サービス --swarm-experimental Swarm の実験的機能を有効化 --swarm-host "tcp://0.0.0.0:3376" 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-machinecreate の実行時に読み込まれ、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 \ foobarmachine

これはローカルの VirtualBox に仮想マシンを作成するにあたり、ストレージのバックエンドには overlay を使用し、エンジンのラベルとしてキーバリュー・ペアの foo=barspam=eggs を指定します。更に、 registry.myco.com にある非安全なレジストリへのイメージ送信・取得を許可します。詳細情報は dockerinfo の出力結果から確認できます。

$ eval$(docker-machine env foobarmachine)$ docker info
Containers: 0Images: 0Storage Driver: overlay
...
Name: foobarmachine
...
Labels: foo=bar spam=eggs provider=virtualbox

ここでは次のフラグが使えます。

エンジンは複数回のラベル指定( --label を使用)をサポートしており、Docker Machine で設定できます。

デーモンのフラグを直接指定できるのに加え、Docker Machine は --engine-opt という追加フラグもサポートしています。これは --engine-optflagname=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-envname=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

マシン作成時に Docker Swarm オプションを指定

先ほどの Docker Engine オプションの設定を指定できるだけではありません。Docker Machine を使えば、 Swarm マスタをどのように作成するかも指定できます。 --swarm-strategy フラグを使えば、Docker Swarm が使うべき スケジューリング・ストラテジ (デフォルトは spread ストラテジ )を指定できます。また前述した --engine-opt オプションで指定したように、 --swarm-opt オプションで一般的なオプションを設定できますが、違いは swarmmanage コマンドに対するオプション(マスタ・ノードの起動時に使用)を指定するものです。これらの機能設定を使うことで、パワーユーザであれば 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」間隔を5秒にします。

作成の事前確認

多くのドライバで、それぞれの場所で実際に作成可能どうか確認する必要があるでしょう(例:VirtualBox がインストールされているかや、指定する API 証明書が有効かどうか)。Docker Machine は「作成の事前確認」(pre-create check)をドライバごとに行えます。

事前確認が成功すると、Docker Machine は通常通り作成手順を進行します。事前確認に失敗すると、 Docker Machine のプロセスは終了コード 3 で終了します。つまり、ゼロ以外の終了コードを返す場合は、事前作成に失敗したのが分かります。