点击上方“公众号”可以订阅哦
经过了近6个月的磨砺,Docker 1.13在2017年1月发布,它标志着 Docker 内置编排能力的进一步成熟。本文将介绍Docker在编排方面的新进展。
简介
去年6月,Docker宣布在1.12版的引擎中内置编排能力,也就是 Swarm Mode,在容器之上引入了服务(service)的概念,也实验性的推出了应用栈(stack)来支持多服务应用的部署管理。但是 Docker 1.12 版本,服务的开发和操作缺乏类似Docker Compose工具的支持,而且由于Docker Compose v1/v2是面向容器编排设计,和Swarm Mode中的概念上有很多不同。只可以用 docker-compose bundle 命令将已有 docker-compose.yml 转换为 Distributed Application Bundle 才能在Swarm mode中部署,非常不便,而且更为严重的是很多功能不支持,导致很多现有编排模板无法直接使用。
在2017年1月发布的 Docker 1.13版本中,Swarm mode迅速成熟,相应的工具支持也进一步完善。 Docker Compose v3 规范,已经全面支持 Swarm mode 概念。而且从 1.13 开始,Docker 命令行工具支持直接使用 v3 版本的 docker-compose.yml 文件来进行应用栈(stack)部署管理,这大大简化了容器编排使用的复杂性。
操作方式和功能简要对比
准备实验
单机环境
首先你需要安装 Docker 1.13 或以上版本的Docker for Windows/Mac/Linux
然后执行docker swarm init命令开启 Docker Swarm 模式
Vagrant多机测试环境
可以参见 https://github.com/denverdino/docker-swarm-mode-vagrant 提供的安装方法
阿里云环境
使用阿里云 Docker Machine 的 ECS 驱动,请参见 https://yq.aliyun.com/articles/55973#2 文中内容
下面的 wordpress.yml 定义了包含两个服务的Wordpress应用
web服务:部署3个实例的wordpress:4容器
mysql服务:部署1个实例的mysql:5.7容器
使用如下命令进行操作
然后就可以通过浏览器来访问 Wordpress 应用了
Redis 集群示例
下面的 redis.yml 定义了包含三个服务的Redis集群应用
redis-master服务:部署1个实例的redis:3容器作为初始的Redis master
redis-slave服务:部署2个实例的redis:3容器作为Redis slave
sentinel服务:部署3个实例的redis-sentinel:5.7容器作为集群的sentinel
使用如下命令进行操作
注:关于利用 Docker 方式搭建 Redis 集群,请参考云栖文章
Docker Compose v3 规范简析
Docker Compose v3 和 v2 模板文件都采用yaml格式,但是语法上存在一定差距
首先,使用version: "3" 或 version: "3.1" (Docker 1.13.1) 作为版本声明
其次,由于 Swarm mode 中网络的特殊性,Compose模板中一些声明比如 expose 和 links 会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。
另外, volumes_from 不再支持,只能使用命名数据卷来实现容器数据的持久化和共享;
v3 中引入了 deploy 指令,可对Swarm mode中服务部署的进行细粒度控制,包括
· resources:定义 cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit 等容器资源控制。(v1/v2中相应指令不再支持)
· mode:支持 global 和 replicated (缺省) 模式的服务;
· replicas:定义 replicated 模式的服务的复本数量
· placement:定义服务容器的部署放置约束条件
· update_config:定义服务的更新方式
· restart_policy:定义服务的重启条件 (v1/v2中restart指令不再支持)
· service:定义服务的标签
虽然 Docker CLI 已经提供了对Docker Compose v3模板的支持。但是 Docker Compose 依然可以作为一个开发工具独立使用,并同时继续支持v1/v2/v2.1等版本已有编排模板。但是当利用 docker-compose up 或 docker-compose run 来部署v3模板时,模板中的 deploy 指令将被忽略
Docker CLI只支持v3模板,但是不支持模板中的 build 指令,只允许构建好的镜像来启动服务的容器。
总结
本文介绍了Docker 1.13引入的Docker Compose v3 规范和操作方式,也对比了不同版本之间的差异,帮助用户实现应用的迁移。
随着Docker Swarm mode的逐渐成熟,阿里云容器服务也在积极开发对其的全面支持和与阿里云产品的对接,相关功能将会在不久推出,为用户在云中提供服务化的容器应用架构。
想了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice
详情请点击【阅读原文】了解哦^^
-END-
云栖社区
ID:yunqiinsight
云计算丨互联网架构丨大数据丨机器学习丨运维


