Docker 1.13 编排能力进化

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 经过了近6个月的磨砺,Docker 1.13在2017年1月发布,它标志着 Docker 内置编排能力的进一步成熟。本文将介绍Docker在编排方面的新进展。

14868225775139

经过了近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 Compose v1/v2 Docker 1.13
启动服务 docker-compose up -d docker stack deploy --compose-file=docker-compose.yml  
伸缩服务 docker-compose scale xxx=n docker service scale xxx=n
停止服务 docker-compose down docker stack rm
跨宿主机

准备实验

单机环境

  • 首先你需要安装 Docker 1.13 或以上版本的Docker for Windows/Mac/Linux
  • 然后执行docker swarm init命令开启 Docker Swarm 模式

Vagrant多机测试环境

阿里云环境

Wordpress示例

下面的 wordpress.yml 定义了包含两个服务的Wordpress应用

  • web服务:部署3个实例的wordpress:4容器
  • mysql服务:部署1个实例的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 应用了

14868171810564

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
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 规范简析

Docker Compose v3 和 v2 模板文件都采用yaml格式,但是语法上存在一定差距

首先,使用version: "3"version: "3.1" (Docker 1.13.1) 作为版本声明

其次,由于 Swarm mode 中网络的特殊性,Compose模板中一些声明比如 exposelinks 会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。

另外, volumes_from 不再支持,只能使用命名数据卷来实现容器数据的持久化和共享;

v3 中引入了 deploy 指令,可对Swarm mode中服务部署的进行细粒度控制,包括

  • resources:定义  cpu_sharescpu_quotacpusetmem_limitmemswap_limit 等容器资源控制。(v1/v2中相应指令不再支持)
  • mode:支持 globalreplicated (缺省) 模式的服务;
  • replicas:定义 replicated 模式的服务的复本数量
  • placement:定义服务容器的部署放置约束条件
  • update_config:定义服务的更新方式
  • restart_policy:定义服务的重启条件 (v1/v2中restart指令不再支持)
  • service:定义服务的标签

Docker 命令行和 Docker Compose 的不同

虽然 Docker CLI 已经提供了对Docker Compose v3模板的支持。但是 Docker Compose 依然可以作为一个开发工具独立使用,并同时继续支持v1/v2/v2.1等版本已有编排模板。但是当利用 docker-compose updocker-compose run 来部署v3模板时,模板中的 deploy 指令将被忽略

Docker CLI只支持v3模板,但是不支持模板中的 build 指令,只允许构建好的镜像来启动服务的容器。

总结

本文介绍了Docker 1.13引入的Docker Compose v3 规范和操作方式,也对比了不同版本之间的差异,帮助用户实现应用的迁移。

随着Docker Swarm mode的逐渐成熟,阿里云容器服务也在积极开发对其的全面支持和与阿里云产品的对接,相关功能将会在不久推出,为用户在云中提供服务化的容器应用架构。

想了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
NoSQL 关系型数据库 MySQL
【Docker 系列】docker 学习九,Compose 内容编排官网初步体验
【Docker 系列】docker 学习九,Compose 内容编排官网初步体验
185 1
|
负载均衡 关系型数据库 MySQL
【必看】Docker容器实战教程第9篇,教你如何使用Docker Compose快速编排容器!
【必看】Docker容器实战教程第9篇,教你如何使用Docker Compose快速编排容器!
177 0
|
14天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
75 24
|
16天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
94 6
|
1月前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
106 3
|
5月前
|
Java Nacos Docker
使用docker compose 编排微服务发布
使用docker compose 编排微服务发布
79 3
|
5月前
|
Ubuntu Devops 云计算
ubuntu docker-compose编排容器并且设置自启动
使用Docker Compose编排容器并设置为Ubuntu系统的自启动服务,不仅优化了应用的部署流程,也提升了运行时的可管理性和可靠性。通过上述步骤,您可以轻松实现这一目标。维护此类服务时,记得定期检查和更新您的 `docker-compose.yml`文件,确保所有的服务都符合当前的业务需求和技术标准。在云计算和微服务架构不断演进的今天,掌握Docker Compose等工具对于DevOps和软件工程师来说,变得尤为重要。
243 3
|
7月前
|
前端开发 API 数据库
【Docker专栏】Docker Compose实战:编排多容器应用
【5月更文挑战第7天】Docker Compose是Docker的多容器管理工具,通过YAML文件简化多容器应用部署。它能一键启动、停止服务,保证开发、测试和生产环境的一致性。安装后,创建`docker-compose.yml`文件定义服务,如示例中的web和db服务。使用`docker-compose up -d`启动服务,通过`docker-compose ps`、`stop`、`down`和`logs`命令管理服务。
150 6
【Docker专栏】Docker Compose实战:编排多容器应用
|
Kubernetes 调度 Apache
Docker 编排工具比较:Kubernetes、Docker Swarm 和 Mesos,选择最适合你的容器编排方案
Docker 编排工具比较:Kubernetes、Docker Swarm 和 Mesos,选择最适合你的容器编排方案
381 0
|
运维 网络协议 调度
docker swarm 集群服务编排部署指南(docker stack)
docker swarm 集群服务编排部署指南(docker stack)
1049 0