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 Machine
,Docker 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 stop
,docker-machine start
用于停止/启动一个虚拟主机。
$ docker-machine stop dev
$ docker-machine start dev