经过了近 6 个月的磨砺,Docker 1.13 在 2017 年 1 月发布,它标志着 Docker 内置编排能力的进一步成熟。本文将介绍 Docker 在编排方面的新进展。
去年 6 月,Docker 宣布在 1.12 版的引擎中内置编排能力,也就是 Swarm Mode,在容器之上引入了服务 (
) 的概念,也实验性的推出了应用栈 (
- service
) 来支持多服务应用的部署管理。但是 Docker 1.12 版本,服务的开发和操作缺乏类似
- stack
工具的支持,而且由于 Docker Compose v1/v2 是面向容器编排设计,和 Swarm Mode 中的概念上有很多不同。只可以用
- Docker Compose
命令将已有
- docker-compose bundle
转换为 才能在 Swarm mode 中部署,非常不便,而且更为严重的是很多功能不支持,导致很多现有编排模板无法直接使用。
- docker-compose.yml
在 2017 年 1 月发布的 Docker 1.13 版本中,Swarm mode 迅速成熟,相应的工具支持也进一步完善。 Docker Compose ,已经全面支持 Swarm mode 概念。而且从 1.13 开始,Docker 命令行工具支持直接使用 v3 版本的
文件来进行应用栈 (
- docker-compose.yml
) 部署管理,这大大简化了容器编排使用的复杂性。
- stack
Docker Compose v1/v2 | Docker 1.13 | |
---|---|---|
启动服务 |
|
|
伸缩服务 |
|
|
停止服务 |
|
|
跨宿主机 | 否 | 是 |
命令开启 Docker Swarm 模式
- docker swarm init
下面的
定义了包含两个服务的 Wordpress 应用
- wordpress.yml
服务:部署 3 个实例的
容器
- wordpress:4
服务:部署 1 个实例的
- mysql
容器
- mysql:5.7
- version: '3'
- services:
- web:
- image: wordpress:4
- environment:
- - WORDPRESS_DB_PASSWORD=password
- - WORDPRESS_AUTH_KEY=changeme
- - WORDPRESS_SECURE_AUTH_KEY=changeme
- - WORDPRESS_LOGGED_IN_KEY=changeme
- - WORDPRESS_NONCE_KEY=changeme
- - WORDPRESS_AUTH_SALT=changeme
- - WORDPRESS_SECURE_AUTH_SALT=changeme
- - WORDPRESS_LOGGED_IN_SALT=changeme
- - WORDPRESS_NONCE_SALT=changeme
- - WORDPRESS_NONCE_AA=changeme
- ports:
- - 80:80
- depends_on:
- - mysql
- deploy:
- replicas: 3
- restart_policy:
- condition: on-failure
- mysql:
- image: mysql:5.7
- environment:
- - MYSQL_ROOT_PASSWORD=password
- deploy:
- restart_policy:
- condition: on-failure
使用如下命令进行操作
- yili@yili-mbp:~$ docker stack deploy -c wordpress.yml wordpress
- Creating network wordpress_default
- Creating service wordpress_web
- Creating service wordpress_mysql
- yili@yili-mbp:~$ docker stack ls
- NAME SERVICES
- wordpress 2
- yili@yili-mbp:~$ docker stack services wordpress
- ID NAME MODE REPLICAS IMAGE
- fc7xhyqdu2b8 wordpress_mysql replicated 1/1 mysql:5.7
- j9a61eaaxi8c wordpress_web replicated 3/3 wordpress:4
然后就可以通过浏览器来访问 Wordpress 应用了
下面的
定义了包含三个服务的 Redis 集群应用
- redis.yml
服务:部署 1 个实例的
- redis-master
容器作为初始的 Redis master
- redis:3
服务:部署 2 个实例的
- redis-slave
容器作为 Redis slave
- redis:3
服务:部署 3 个实例的
- sentinel
容器作为集群的 sentinel
- redis-sentinel:5.7
- version: "3"
- services:
- redis-master:
- image: redis:3
- deploy:
- restart_policy:
- condition: on-failure
- redis-slave:
- image: redis:3
- command: redis-server --slaveof redis-master 6379
- deploy:
- replicas: 2
- restart_policy:
- condition: on-failure
- sentinel:
- image: registry.aliyuncs.com/acs-sample/redis-sentinel:3
- environment:
- - SENTINEL_DOWN_AFTER=5000
- - SENTINEL_FAILOVER=5000
- deploy:
- replicas: 3
- restart_policy:
- condition: on-failure
使用如下命令进行操作
- yili@yili-mbp:~$ docker stack deploy -c redis.yml redis
- Creating network redis_default
- Creating service redis_sentinel
- Creating service redis_redis-master
- Creating service redis_redis-slave
- yili@yili-mbp:~$ docker stack services redis
- ID NAME MODE REPLICAS IMAGE
- kbg7t2fs625f redis_redis-master replicated 1/1 redis:3
- num1qjudt947 redis_redis-slave replicated 2/2 redis:3
- xv24uy1cqu7u redis_sentinel replicated 3/3 registry.aliyuncs.com/acs-sample/redis-sentinel:3
注:关于利用 Docker 方式搭建 Redis 集群,请参考
Docker Compose
和
- v3
模板文件都采用 yaml 格式,但是语法上存在一定差距
- v2
首先,使用
或
- version: "3"
(Docker 1.13.1) 作为版本声明
- version: "3.1"
其次,由于 Swarm mode 中网络的特殊性,Compose 模板中一些声明比如
和
- expose
会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。
- links
另外,
不再支持,只能使用命名数据卷来实现容器数据的持久化和共享;
- volumes_from
v3 中引入了
指令,可对 Swarm mode 中服务部署的进行细粒度控制,包括
- deploy
:定义
- resources
,
- cpu_shares
,
- cpu_quota
,
- cpuset
,
- mem_limit
等容器资源控制。(v1/v2 中相应指令不再支持)
- memswap_limit
:支持
- mode
和
- global
(缺省) 模式的服务;
- replicated
:定义
- replicas
模式的服务的复本数量
- replicated
:定义服务容器的部署放置约束条件
- placement
:定义服务的更新方式
- update_config
:定义服务的重启条件 (v1/v2 中
- restart_policy
指令不再支持)
- restart
虽然 Docker CLI 已经提供了对 Docker Compose v3 模板的支持。但是 Docker Compose 依然可以作为一个开发工具独立使用,并同时继续支持 v1/v2/v2.1 等版本已有编排模板。但是当利用
或
- docker-compose up
来部署 v3 模板时,模板中的
- docker-compose run
指令将被忽略
- deploy
Docker CLI 只支持 v3 模板,但是不支持模板中的
指令,只允许构建好的镜像来启动服务的容器。
- build
本文介绍了 Docker 1.13 引入的 Docker Compose v3 规范和操作方式,也对比了不同版本之间的差异,帮助用户实现应用的迁移。
随着 Docker Swarm mode 的逐渐成熟,阿里云容器服务也在积极开发对其的全面支持和与阿里云产品的对接,相关功能将会在不久推出,为用户在云中提供服务化的容器应用架构。
想了解更多容器服务内容,请访问
来源: