使用Docker Machine在云上的环境中部署Docker
使用Docker Machine可以一键完成网络和安全设置、实例创建、SSH设置、Docker安装和配置(实际顺序未经确认)。
以下示例涉及EC2和GCE。假设Docker Machine和云账户已完成设置。仅列出基本必需选项,其他选项请参考参考资料。
整体情报
关于驱动程序
Docker Machine包含了驱动程序的概念。Docker Machine将VirtualBox的虚拟服务器和云实例抽象成为机器(machine)的形式。当连接到EC2上的机器时,需要通过EC2的驱动程序进行连接;当连接到GCE上的机器时,需要通过GCE的驱动程序进行连接。这样,用户就可以通过统一的接口来操作机器(machine)。
用户只需要在创建机器时意识到驱动程序。每个驱动程序都有不同的选项。有关提供的驱动程序及其参考请参考以下内容。
- Supported Drivers https://docs.docker.com/machine/drivers/
关于操作系统
默认情况下,本地使用Boot2Docker,远程使用Ubuntu LTS。例如,在使用EC2时,可以通过指定AMI来选择其他操作系统。支持的操作系统请参考以下内容。
- Driver options and operating system defaults https://docs.docker.com/machine/drivers/os-base/
请注意,如果使用除默认操作系统镜像以外的镜像,请将用户名设置为该镜像的默认用户名。正如上述页面所述,例如在EC2中使用Red Hat AMI时,默认用户名是ec2-user,因此需要使用选项–amazonec2-ssh-user ec2-user进行指定。选项名称因驱动程序而异。
机器的制造
云计算实例 EC2
- リファレンス https://docs.docker.com/machine/drivers/aws/
docker-machine create ec2 \
--driver amazonec2 \
--amazonec2-access-key (アクセスキーID) \
--amazonec2-secret-key (シークレットアクセスキー) \
--amazonec2-vpc-id (VPC ID) \
--amazonec2-region (リージョン) --amazonec2-zone (ゾーン)
区域和可用区并非强制要求,但默认情况下会使用us-east-1c,因此实际上是必须的。目前,认证方法只能使用访问密钥。
只需这个就可以完成了。不需要AWS的SDK。很简单。
谷歌计算引擎
- リファレンス https://docs.docker.com/machine/drivers/gce/
docker-machine create gcloud --driver google --google-project (任意のプロジェクト)
运行后,浏览器将启动进行OAuth认证。如果无法启动浏览器,则会显示URL,您可以复制并粘贴该URL以进行访问和认证。
我們完成了。同樣也不需要SDK。
连接方式
将主机设置为活动状态(环境)
以下是使用EC2实例进行说明,但正如前面所提到的,一旦创建了实例,后续操作可以在同一界面上进行(尽管行为可能有所不同)。
在创建机器后,被告知要连接,因此尝试执行docker-machine env ec2。
$ docker-machine env ec2
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://*.*.*.*:2376"
export DOCKER_CERT_PATH="/Users/masahiro/.docker/machine/machines/ec2"
export DOCKER_MACHINE_NAME="ec2"
# Run this command to configure your shell:
# eval "$(docker-machine env ec2)"
一系列的导出命令会被输出。如果将其写入.bash_profile文件中,那么该主机将成为默认活动主机。docker命令将自动连接到活动主机。换句话说,通过使用常规的docker命令,可以操作活动主机上的docker。
或者,再次执行eval “$(docker-machine env ec2)”来将此主机设为活动状态。”active”只是用来确认活动主机的命令。活动的主机可以通过ls命令进行确认。
$ eval "$(docker-machine env ec2)"
$ docker-machine active
ec2
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default virtualbox Running tcp://192.168.99.100:2376
ec2 * amazonec2 Running tcp://*.*.*.*:2376
不启用主机连接,并进行连接配置。
如果您希望在不切换到活动主机的情况下使用特定的主机,请使用配置文件。配置命令以docker命令选项的形式输出与主机的连接信息。建议使用docker $(docker-machine config ec2) ps来使用。
$ docker-machine config ec2
--tlsverify --tlscacert="/Users/masahiro/.docker/machine/machines/ec2/ca.pem" --tlscert="/Users/masahiro/.docker/machine/machines/ec2/cert.pem" --tlskey="/Users/masahiro/.docker/machine/machines/ec2/key.pem" -H=tcp://*.*.*.*:2376
$ docker $(docker-machine config ec2) ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
机器的启动、停止、删除
docker-machine start ec2
docker-machine stop ec2
docker-machine rm ec2
这里EC2和GCE的行为有所不同。
在EC2的情况下,停止使用stop命令,终止使用rm命令,非常清楚明了。
而在GCE方面,停止使用stop命令会导致实例被删除(没有对应于EC2中的stop的状态)。虽然机器的信息仍然存在于本地,但如果启动,实例将再次以相同选项创建,但容器等数据当然会全部消失。
执行环境
$ date
2015年 9月30日 水曜日 11時10分23秒 JST
$ docker -v
Docker version 1.8.1, build d12ea79
$ docker-machine -v
docker-machine version 0.4.1 (e2c88d6)
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.5
BuildVersion: 14F27