create¶
マシンを作成します。どのプロバイダ(VirtualBox、DigitalOcean、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 crate
コマンドには全てのドライバで適用できる共通のフラグがあります。主に、マシンのプロビジョニング手順における挙動を制御するもので(Docker Swarm コンテナの作成も含みます)、利用者がカスタマイズできます。
$ docker-machine create
Docker Machine Version: 0.5.0 (45e3688)
Usage: docker-machine create [OPTIONS] [arg...]
Create a machine.
Run 'docker-machine create --driver name' to include the create flags for that driver in the help text.
Options:
--driver, -d "none" Driver to create machine with.
--engine-install-url "https://get.docker.com" Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
--engine-opt [--engine-opt option --engine-opt option] Specify arbitrary flags to include with the created engine in the form flag=value
--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option] Specify insecure registries to allow with the created engine
--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] Specify registry mirrors to use
--engine-label [--engine-label option --engine-label option] Specify labels for the created engine
--engine-storage-driver Specify a storage driver to use with the engine
--engine-env [--engine-env option --engine-env option] Specify environment variables to set in the engine
--swarm Configure Machine with Swarm
--swarm-image "swarm:latest" Specify Docker image to use for Swarm [$MACHINE_SWARM_IMAGE]
--swarm-master Configure Machine to be a Swarm master
--swarm-discovery Discovery service to use with Swarm
--swarm-strategy "spread" Define a default scheduling strategy for Swarm
--swarm-opt [--swarm-opt option --swarm-opt option] Define arbitrary flags for swarm
--swarm-host "tcp://0.0.0.0:3376" ip/socket to listen on for Swarm master
--swarm-addr addr to advertise for Swarm (default: detect and use the machine IP)
さらに、Machine は各プラグイン・コードに含むフラグも受け付けることができ、これをドライバのフラグで指定できます。これにより、利用者は作成するマシン向けプロバイダ固有のパラメータをカスタマイズできます。例えば、容量( --amazonec2-instance-type m1.medium
)や地理的なリージョン( --amazonec2-region us-west-1
)などです。
プロバイダ固有のフラグを確認するには create
ヘルプ・テキストを表示するときに --deriver
を単純に指定するだけです。
$ docker-machine create --driver virtualbox --help
Usage: docker-machine create [OPTIONS] [arg...]
Create a machine.
Run 'docker-machine create --driver name' to include the create flags for that driver in the help text.
Options:
--driver, -d "none" Driver to create machine with.
--engine-env [--engine-env option --engine-env option] Specify environment variables to set in the engine
--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option] Specify insecure registries to allow with the created engine
--engine-install-url "https://get.docker.com" Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
--engine-label [--engine-label option --engine-label option] Specify labels for the created engine
--engine-opt [--engine-opt option --engine-opt option] Specify arbitrary flags to include with the created engine in the form flag=value
--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] Specify registry mirrors to use
--engine-storage-driver Specify a storage driver to use with the engine
--swarm Configure Machine with Swarm
--swarm-addr addr to advertise for Swarm (default: detect and use the machine IP)
--swarm-discovery Discovery service to use with Swarm
--swarm-host "tcp://0.0.0.0:3376" ip/socket to listen on for Swarm master
--swarm-image "swarm:latest" Specify Docker image to use for Swarm [$MACHINE_SWARM_IMAGE]
--swarm-master Configure Machine to be a Swarm master
--swarm-opt [--swarm-opt option --swarm-opt option] Define arbitrary flags for swarm
--swarm-strategy "spread" Define a default scheduling strategy for Swarm
--virtualbox-boot2docker-url The URL of the boot2docker image. Defaults to the latest available version [$VIRTUALBOX_BOOT2DOCKER_URL]
--virtualbox-cpu-count "1" number of CPUs for the machine (-1 to use the number of CPUs available) [$VIRTUALBOX_CPU_COUNT]
--virtualbox-disk-size "20000" Size of disk for host in MB [$VIRTUALBOX_DISK_SIZE]
--virtualbox-host-dns-resolver Use the host DNS resolver [$VIRTUALBOX_HOST_DNS_RESOLVER]
--virtualbox-dns-proxy Proxy all DNS requests to the host [$VIRTUALBOX_DNS_PROXY]
--virtualbox-hostonly-cidr "192.168.99.1/24" Specify the Host Only CIDR [$VIRTUALBOX_HOSTONLY_CIDR]
--virtualbox-hostonly-nicpromisc "deny" Specify the Host Only Network Adapter Promiscuous Mode [$VIRTUALBOX_HOSTONLY_NIC_PROMISC]
--virtualbox-hostonly-nictype "82540EM" Specify the Host Only Network Adapter Type [$VIRTUALBOX_HOSTONLY_NIC_TYPE]
--virtualbox-import-boot2docker-vm The name of a Boot2Docker VM to import
--virtualbox-memory "1024" Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]
--virtualbox-no-share Disable the mount of your home directory
環境変数を使ってもフラグと同様の指定ができるので、覚えておいてください(列の左側にあります)。環境変数は 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=enngs
を指定します。さらに、 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
をプロキシ・サーバとして使うには、crate コマンドで次のように実行します。
$ 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
コマンドに対するオプション(マスタ・ノードの起動時に使用)を指定するものです。これらの機能設定を使うことで、パワーユーザであれば beartbeat 間隔の調整や、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秒にします。