前文介绍如何在单独Docker环境下使用compose,本文介绍如何在swarm集群中使用compose。
限制
image构建
在swarm中构建image与单机版一样,使用相同的命令。但是构建完成的image只存在于当前主机,如果运行镜像的多个实例,并且这些实例分布在集群中的不同节点上,那么就需要分发构建好的镜像,一个节点不会共享另一个节点上已经构建好的镜像。解决办法为首先在某个节点上构建image,然后再将image上传到镜像仓库,然后在compose的定义文件中从仓库引用此镜像。救命如下:
$ docker build -t myusername/web .
$ docker push myusername/web
$ cat docker-compose.yml
web:
image: myusername/web
$ docker-compose up -d
$ docker-compose scale web=3
多依赖
如果某个应用有多个服务组成,如下例:
version: "2"
services:
foo:
image: foo
volumes_from: ["bar"]
network_mode: "service:baz"
bar:
image: bar
baz:
image: baz
上例中,foo的volume依赖于bar,foo的网络与baz共享,实例这三个服务必需部署在同一个节点上才行,也就是foo明确依赖于bar与baz。在部署时的实际调度中,如果依次先部署foo,那么系统会发现它依赖于bar与baz,然后系统在同