docker机器创建

预计阅读时间:10分钟

创建一台机器。需要该--driver标志以指示应在其上创建计算机的提供商(VirtualBox,DigitalOcean,AWS等),以及一个参数以指示创建的计算机的名称。

寻找可用驱动程序的完整列表?

有关可使用的驱动程序的完整列表docker-machine create以及如何使用它们的信息,请参阅机器驱动程序

例子

这是使用--virtualbox驱动程序创建名为的计算机的示例dev

$ 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命令具有适用于所有驱动程序的一些标志。这些可能会控制用户可能希望自定义的Machine设置过程(包括创建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_REGISTRY_MIRROR]
   --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)
   --swarm-experimental                                                                                 Enable Swarm experimental features

另外,驱动程序可以指定Machine可以接受的标志作为其插件代码的一部分。这些允许用户自定义所创建机器的提供程序特定的参数,例如大小(--amazonec2-instance-type m1.medium),地理区域(--amazonec2-region us-west-1)等。

要查看提供程序特定的标志,只需--driver在调用create帮助文本时传递一个值。

$ 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_REGISTRY_MIRROR]
   --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-experimental                                                                                 Enable Swarm experimental features
   --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机器会将它们用作标志的默认值。

为创建的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。您可以通过检查以下输出来验证其中的大部分内容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

支持的标志如下:

如果引擎支持多次指定标志(例如使用 --label),那么Doc​​ker Machine也支持。

除了直接支持的守护程序标志子集之外,Docker机器还支持其他标志--engine-opt,该标志可用于使用语法指定任意守护程序选项--engine-opt flagname=value。例如,要指定守护程序应用8.8.8.8作所有容器的DNS服务器,并始​​终使用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选项之外,您还可以使用Machine指定如何配置创建的swarm管理器。有一个--swarm-strategy标志,可用于指定 Docker Swarm应该使用的调度策略(Machine默认为该spread策略)。还有一个通用--swarm-opt选项,其工作方式与上述--engine-opt选项类似,不同之处在于它指定swarm manage命令(用于引导主节点)的选项而不是基本命令。您可以使用它来配置高级用户可能感兴趣的功能,例如配置心跳间隔或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=5s \
    upbeat

这将群调度策略设置为“ binpack”(每个主机尽可能紧密地包装在容器中,而不是散布在容器中),“心跳”间隔为5秒。

预创建检查

在创建计算机之前,许多驱动程序都需要具备一定的条件集。例如,在使用virtualbox驱动程序之前,需要先安装VirtualBox 。因此,Docker Machine具有在驱动程序级别指定的“预创建检查”。

如果此创建前检查成功,则Docker Machine照常进行创建。如果创建前检查失败,则Docker Machine进程退出并显示状态代码3,以指示非零退出的源是创建前检查失败。

机器创建子命令