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-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-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-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-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 \
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=bar
spam=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
マシン作成時に 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」間隔を5秒にします。
作成の事前確認¶
多くのドライバで、それぞれの場所で実際に作成可能どうか確認する必要があるでしょう(例:VirtualBox がインストールされているかや、指定する API 証明書が有効かどうか)。Docker Machine は「作成の事前確認」(pre-create check)をドライバごとに行えます。
事前確認が成功すると、Docker Machine は通常通り作成手順を進行します。事前確認に失敗すると、 Docker Machine のプロセスは終了コード 3 で終了します。つまり、ゼロ以外の終了コードを返す場合は、事前作成に失敗したのが分かります。