Docker 1.13 编排能力进化

摘要: 经过了近6个月的磨砺,Docker 1.13在2017年1月发布,它标志着 Docker 内置编排能力的进一步成熟。本文将介绍Docker在编排方面的新进展。

经过了近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 应用了

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

使用如下命令进行操作

[email protected]:~$ 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
[email protected]:~$ 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模板中一些声明比如 expose 和 links 会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。

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

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

  • resources:定义  cpu_sharescpu_quotacpusetmem_limitmemswap_limit 等容器资源控制。(v1/v2中相应指令不再支持)
  • mode:支持 global 和 replicated (缺省) 模式的服务;
  • 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 up 或 docker-compose run 来部署v3模板时,模板中的 deploy 指令将被忽略

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

总结

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

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

时间: 2024-10-04 05:12:57

Docker 1.13 编排能力进化的相关文章

docker探索-Docker 1.13 编排能力进化(十三)

 简介 docker stack deploy和docker-compose up,这两个命令都是操作compose的yml文件的,有什么区别?想知道这个问题,看下面文章 https://yq.aliyun.com/articles/69444 原文地址:https://www.cnblogs.com/520playboy/p/8124734.html

Docker 1.13 新特性 —— Docker服务编排相关

摘要: 近期发布的1.13的版本中,Docker对Docker Engine内置的编排能力做了很多的更新,使用新的这些特性,我们能更好的编排和迭代我们的应用. 我们都知道在去年Docker轰动容器社区的在Docker Engine中集成了编排能力,并随着1.12的Docker版本发布,但是那个版本的编排还有很多的不足,比如: 不兼容传统的Docker Compose格式,从Compose迁移到服务复杂. 不支持复杂的服务发布方式和回滚等 而在近期发布的1.13的版本中,Docker对Docker

Docker | 第七章:Docker Compose服务编排介绍及使用

前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件.大多都是一个镜像启动.当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也会崩溃的,而且效率也很低,维护的量也就很大了.所以,本章节就来了解下,如何利用官方提供的Compose编排工具按一定的业务规则来合理的进行容器启停工作. Compose介绍 Compose安装 二进制文件直接安装 使用pip(Python包管理工具)安装 命令补齐 Compose常用命令 build

Docker容器——Compose编排_consul集群_template模板

docker compose容器编排 (1)docker compose的前身Fig,它是一个定义及运行多个docker容器的工具 (2)使用docker compose不再需要使用shell脚本启动容器 (3)docker compose非常适合组合使用多个容器进行开发的场景 YAML是一种标记语言很直观的数据序列化格式 文件格式及编写注意事项: 不支持制表符tab键缩进,需要使用空格缩进 通常开头缩进2个空格 字符后缩进1个空格,如冒号,逗号,横杆 用井号注释 如果包含特殊字符用单引号引起来

Docker 1.13 最实用命令行:终于可以愉快地打扫房间了

Docker 1.13 出来已经有一段时间了,新版本添加了许多有用的命令,本文作者从处女座的洁癖(此处有雾)出发,告诉大家一些整理环境的小技巧.打扫房间再也不需费时又费力了,简单的命令,就可以轻松地把物品分门别类(容器.镜像.网络.存储卷--)地整理好 在 1.13 版本中, Docker 向 CLI 添加了一些有用的命令,让环境更加整洁.你可能已经体验了很长时间乱糟糟的开发环境--无用的容器,挂起的 Docker 镜像,弃置的 volume ,被遗忘的网络--所有这些过时的事物占据了宝贵的资源

Docker 1.13 – 新增功能大揭秘

前言 Docker 1.13 马上就要发布了.从 7 月 29 日发布 1.12 发布以来,已经过去 4 个多月了,对于活跃的 Docker 社区来说,已经很久了,让我们看看都 1.13 都新增了什么内容吧. 1.13 有一千二百多个 issue/pull request,四千多个 commits,是历史上最高的.这并不是一个简单的小版本变化,里面有大量的更新. 要想测试 1.13.0 的新功能,可以起一个新的机器,然后在里面运行:curl -fsSL https://test.docker.c

Docker Compose容器编排

本章知识点概括: Docker Compose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群 **Docker Compose容器编排功能** Docker compose的前身是Fig,它是一个定义及运行多个docker容器的工具 使用Docker Compose不再需要使用shell脚本来启动容器 Docker Compose非常适合组合是同多个容器进行开发的场景 可以执行多个容器的操作 **Docker Compose容器编排** YAML是一种标记语言很直观

Docker系列13:容器编排(1)

一.容器编排基础 1.容器编排概念 可以指定各个容器中的程序是有依赖关系的 比如有个web服务必须在mysql正常的情况下,才能运行,那么这个时候就是web容器是依赖mysql容器的,只有mysql容器正常启动,web容器才能启动. 2.容器编排工具 docker compose k8s k3s 二.compose详解 1.什么是compose Docker Compose 将所管理的容器分为三层,分别是工程(project).服务(service).容器(container) Docker C

Docker常用的编排管理工具(批量管理)

前言:我们都知道docker的好处,总而言之就是多快好省.那我们要能够玩转docker就得知道配合docker使用的两种工具-------Supervisor和Compose.我来分别介绍这两种工具和如何使用. Supervisor: 使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Supervisor 可以更好的控制.管理.重启我们希望运行的进程.它是c/s系统. 演示: 在这里我们演示一下如何同时使用 ssh 和 apache 服务. 首先创建一个 Dockerfile