title: Docker三剑客之Machine
date: 2015-12-02 10:37:47
tags: docker

categories: Docker 三剑客

随着开发者对Docker了解的深入,使用其进行分布式部署变得复杂。开发者需要在开发,测试以及生产环境中的可移植应用,这些应用需要在不同的平台提供商之间迁移,比如在不同的云平台或者私有数据中心部署,同时,应用应该是可组合的,一个应用可以分解为多个服务。 Docker公司在2014年12月发布了三款用于解决多容器分布式软件可移植部署的问题。

Docker Machine为本地,私有数据中心及公有云平台提供Docker引擎,实现从零到Docker的一键部署。

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。

Docker Swarm为Docker容器提供了原生的集群,它将多个Docker引擎的资源汇聚在一起,并提供Docker标准的API,使Docker可以轻松扩展到多台主机。


目录:
* 安装Docker Machine
* Docker Machine命令

本篇介绍Docker MachineDocker Machine用于一键部署Docker,使用它可以自动的创建主机并在主机上安装Docker。通过Docker Machine创建了主机(host)之后,可以使用它提供的一系列命令管理这些主机,使用这些命令你可以:
- 启动,停止,重启主机,或者查看主机的各种参数;
- 升级Docker;
- 配置docker client使其与主机通信;

安装Docker Machine

Linux下安装Docker Machine:

$ curl -L https://github.com/docker/machine/releases/download/v0.5.0/docker-machine_linux-amd64.zip >machine.zip  #下载Docker Machine二进制文件
$ unzip machine.zip  #解压压缩包
$ sudo mv docker-machine* /usr/local/bin  #将所有二进制文件移动到/usr/local/bin

执行玩上述命令之后,执行docker-machine -v检查是否安装成功:

$ docker-machine -v
docker-machine version 0.5.1 (7e8e38e)

安装成功!
其他平台的安装可以参考:Docker Machine

Note:
要想使用Docker Machine创建host,必须在docker-machine create命令后指定--driver标识,我们使用了Oracle的 VirtualBox,所以接下来的命令请确保你安装了VirtualBox,官网地址:VirtualBox

Docker Machine命令

docker-machine有如下常用命令:
- docker-machine ls
- docker-machine create
- docker-machine env
- docker-machine ip
- docker-machine stop
- docker-machine start

docker-machine命令可以查看已经创建的hosts:

$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL

上面显示的结果表示还没有创建任何host

docker-machine create用来创建一个host,创建完之后会自动的在其中安装Docker。这个命令需要指定--driver选项,在这里我们使用的是virtualbox。最后指定要创建的host的名字,例如:

$ docker-machine create --driver virtualbox dev

这样我们就创建了一个名字为dev的主机,并在其中自动安装了Docker。现在使用docker-machine ls命令可以看到创建好的host:

docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    -        virtualbox   Running   tcp://192.168.99.100:2376

这里有有一个问题,我们使用virtualbox创建一个主机,我们知道创建主机是需要系统镜像的,但我们在docker-machine create中并没有指定任何镜像,我的本机上也没有任何操作系统的镜像文件,那么它是怎么创建系统的呢?

原来,系统默认使用一些镜像来创建host,且使用不同的驱动(--driver)时默认的操作系统镜像不一样,对于driver=virtualbox,默认使用boot2docker.iso。所以当使用--dirver=virtualbox执行docker-machine create时,会自动下载boot2docker.iso并将其作为系统镜像。

docker-machine env用于与某个创建好的host通信:

$ eval "$(docker-machine env dev)"

上面的命令将当前控制台环境更改为创建好的host,此后再执行命令,就会在dev中执行。譬如之后执行:

docker run -it --name test ubuntu /bin/bash

就会在dev中创建一个名为test的容器。
当你重新打开了控制台或重启了host后,要重新执行上面的docker-machine env命令。

docker-machine ip命令用于查看虚拟主机的IP地址:

$ docker-machine ip dev
192.168.99.100

需要注意,在创建的host(即虚拟主机)中启动的容器如果使用了-p映射了端口,端口映射到虚拟主机的端口上,而不是真实主机的端口上。比如,我们执行以下命令:

$ eval "$(docker-machine env dev)"
$ docker run -d -p 8000:80 nginx

此时我们可以在192.168.99.100:8000上访问到nginx服务,即在虚拟主机的对应端口上。

docker-machine stopdocker-machine start用于停止/启动一个虚拟主机。

$ docker-machine stop dev
$ docker-machine start dev