
经过了近6个月的磨砺,docker 1.13在2017年1月发布,它标志着 docker 内置编排能力的进一步成熟。本文将介绍docker在编排方面的新进展。
docker compose v1/v2
docker 1.13
启动服务
<code>docker-compose up -d</code>
<code>docker stack deploy --compose-file=docker-compose.yml </code>
伸缩服务
<code>docker-compose scale xxx=n</code>
<code>docker service scale xxx=n</code>
停止服务
<code>docker-compose down</code>
<code>docker stack rm</code>
跨宿主机
否
是
首先你需要安装 docker 1.13 或以上版本的docker for windows/mac/linux
然后执行<code>docker swarm init</code>命令开启 docker swarm 模式
下面的 <code>wordpress.yml</code> 定义了包含两个服务的wordpress应用
<code>web</code>服务:部署3个实例的<code>wordpress:4</code>容器
<code>mysql</code>服务:部署1个实例的<code>mysql:5.7</code>容器
使用如下命令进行操作
然后就可以通过浏览器来访问 wordpress 应用了
下面的 <code>redis.yml</code> 定义了包含三个服务的redis集群应用
<code>redis-master</code>服务:部署1个实例的<code>redis:3</code>容器作为初始的redis master
<code>redis-slave</code>服务:部署2个实例的<code>redis:3</code>容器作为redis slave
<code>sentinel</code>服务:部署3个实例的<code>redis-sentinel:5.7</code>容器作为集群的sentinel
docker compose <code>v3</code> 和 <code>v2</code> 模板文件都采用yaml格式,但是语法上存在一定差距
首先,使用<code>version: "3"</code> 或 <code>version: "3.1"</code> (docker 1.13.1) 作为版本声明
其次,由于 swarm mode 中网络的特殊性,compose模板中一些声明比如 <code>expose</code> 和 <code>links</code> 会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。
另外, <code>volumes_from</code> 不再支持,只能使用命名数据卷来实现容器数据的持久化和共享;
v3 中引入了 <code>deploy</code> 指令,可对swarm mode中服务部署的进行细粒度控制,包括
<code>resources</code>:定义 <code>cpu_shares</code>, <code>cpu_quota</code>, <code>cpuset</code>, <code>mem_limit</code>, <code>memswap_limit</code> 等容器资源控制。(v1/v2中相应指令不再支持)
<code>mode</code>:支持 <code>global</code> 和 <code>replicated</code> (缺省) 模式的服务;
<code>replicas</code>:定义 <code>replicated</code> 模式的服务的复本数量
<code>placement</code>:定义服务容器的部署放置约束条件
<code>update_config</code>:定义服务的更新方式
<code>restart_policy</code>:定义服务的重启条件 (v1/v2中<code>restart</code>指令不再支持)
<code>service</code>:定义服务的标签
虽然 docker cli 已经提供了对docker compose v3模板的支持。但是 docker compose 依然可以作为一个开发工具独立使用,并同时继续支持v1/v2/v2.1等版本已有编排模板。但是当利用 <code>docker-compose up</code> 或 <code>docker-compose run</code> 来部署v3模板时,模板中的 <code>deploy</code> 指令将被忽略
docker cli只支持v3模板,但是不支持模板中的 <code>build</code> 指令,只允许构建好的镜像来启动服务的容器。
本文介绍了docker 1.13引入的docker compose v3 规范和操作方式,也对比了不同版本之间的差异,帮助用户实现应用的迁移。
随着docker swarm mode的逐渐成熟,阿里云容器服务也在积极开发对其的全面支持和与阿里云产品的对接,相关功能将会在不久推出,为用户在云中提供服务化的容器应用架构。