本文的案例结合了Docker的三大编排工具Docker Machine、Compose与Swarm,值得读者们参阅。 Docker现在已经推出了一些新的命令行工具,这些工具可以简单的编排(orchestration )Docker实例、集群以及容器管理。它们是:
这三种技术中,Swarm目前不适合在生产中使用,因此在这篇文章中我不会讲关于它的太多细节。 Docker Machine对于直接下载预编译的二进制文件来说,我决定使用 Homebrew(OS X的管理包工具):这样就安装了docker-machine。 我已经安装了 VirtualBox,并且要创建一个叫“testing”的虚拟机:
docker-machine使用几个命令来帮助你连接到本地安装的Docker客户端:
我现在启用了一个虚拟机并准备使用Docker。 和其他新安装的一样,让我们运行一个“Hello World”:
最后,你可以使用docker-machie ssh machine-name命令SSH到虚拟机:
太棒了,我现在有一个虚拟机运行在我的电脑上,接下来呢? 设计docker-machine就是和以下公有和私有的云服务提供商(以后会添加更多)一起使用的。
让我们使用docker-machine来启用一个Digital Ocean的实例。你需要生成一个Personal Access Token。一旦用token启用机子就会像下面所示一样:
那么发生了什么呢?docker-machine访问我的Digital Ocean账户通过API并且启用了以下配置的实例:
这些默认的配置可以通过提供更多的选项被修改,运行docker-machine create --help获取帮助查看所有带例子的选项。 一旦实例开启,docker-machine通过SSH连接到安装、配置以及开启的最新的Docker上。 所以,我们现在有两台Machines,一个在本地,一个在Digital Ocean上。 让我们再次运行“Hello World”,但是这次使用刚才启动的那个实例:
并且SSH到那个机器中:
最终,你可以使用docker-mashie stop machine-name和docker-mashie rm machine-name来停止和移除machines。请注意当使用rm时,是不会提示你是否确定删除。
总结,以上就是docker-machie的总览。正如你看到的,它确实很方便在很多不同的供应商中来引导Docker服务实例,并且使用一个本地machine命令就可以操控他们。 Docker ComposeDocker开始充满生机是因为有了Fig, 这是我曾在以前的文章中写到过,当前版本并没有添加太多的新功能,但它开始奠定了与docker-swarm工作的基础,单击 这里查看详细日志。像docker-machine一样,我使用Homebrew公式安装docker-compose。
然后,使用docker-machine创建一个Docker服务实例:
因为docker-compose不直接与docker-machine交互,我们需要告诉docker客户端那些刚刚启动的服务器实例的详细信息。 此命令注入所需Docker客户端的环境变量来连接到服务实例,要看到他们,你只需运行docker-machine env machine-name。 往后它就像Fig一样,除了fig.yml文件现在应该改为docker-compose.yml,在我以前的博文里有一个fig.yml文件描述:
它启用两个容器并且把它们连接到一起,还有在Nginx容器内的/var/www/html被挂载到host的./web文件夹下。我准备运行docker-compose命令的文件夹的结构是这样的: 开始我要拉取需要启用的镜像,你可以忽略此部分。 现在镜像已经被拉取下来,是时候开启容器了: 我们现在有了两个正在运行的容器: 你也可以打开浏览器: 在我的例子中我看到PHPinfo()页面,如下: 一旦容器开启,你可以使用docker exec来连接到容器内部:
最后你可以停止以及移除容器,当然还有Docker实例: Docker Swarm在进一步讨论之前,先看下官方文档的警告:警告:Swarm当前是beta版本,因此后期可能会有变化。我们还不推荐在生产环境中使用。现在让我们使用Homebrew来安装docker-swarm:
因为我们已经安装了docker-machine,我将要使用它在本地创建一个集群。首先,我们需要启动一个实例并运行swarm容器:
正如你所见,当容器启动时,我得到了一个token:63e7a1adb607ce4db056a29b1f5d30cf,我将要用它来添加更多的节点,但是首先我们需要创建一个Swarm master:
然后,我们需要连接Docker客户端到Swarm上,这就需要将--swarm添加到$(docker-machine env machine-name)命令上: 现在让我们添加另一个节点:
我们现在有了2个节点的集群 - “swarm-master”: 使用docker info来获取更多有关集群的信息: 太棒了,但这意味着什么? 让我们拉取一些镜像: 注意到我是如何在“swarm-master”上拉取redis镜像以及在swarm-node-00上拉取mysql的,现在我可以保证容器只在有镜像的那个节点上启用:
另一个例子是使用节点的端口,让我们在两个节点上都拉取我的nginx-php镜像: 现在,让我们启用一个容器并绑定到80端口。 再有: 你会说这没什么特别的啊?正常来说,当试图启动第二个容器时,你会得到如下信息因为你不用将同一个端口绑定到两个容器上: 然而,在集群的情况下,因为Docker知道集群节点运行的是什么以及哪些端口是在使用的。Docker可以简单地通过Swarm在“swarm-node-00”上启动容器并且它知道“swarm-master”已经使用了80端口:
所有这一切都没有提示或特殊的命令行,它的帮助仅仅是用它来做到这些。 正如你所看到的,docker-swarm仍然有非常大的发展潜力,但也有一些不如意的地方,如容器不能够跨节点通讯。然而,伴随着 (他们使用Open vSwitch开发了一个基于软件定义网络解决方案的容器)的加入,我想用不了多长时间这个问题就能得到解决。 最后,让我们删除在运行的实例: 就这样吧,期待在未来的几个月这些工具的更新,我也会进一步跟进。 原文:Docker Machine, Compose & Swarm (翻译:田浩浩 校对:李颖杰) 来自:http:///article/275 |
|