背景

回顾docker-compose vs docker stack差异:

① docker-compose是docker引擎之外的容器编排工具(Python实现),需要单独安装;docker stack 是docker引擎原生支持的容器编排技术(Go实现)

② 两者都支持最新docker-compose.yml 版本3容器编排文件,部分指令有差异。

③ docker-compose 能现场Build镜像,更适用于开发、测试时候单机迭代部署;docker stack须预先准备镜像,具备生产环境诸多特性。

为提高项目服务可用性评价值(SLA),决心从docker-compose切换到docker stack生产部署。

头脑风暴

docker swarm 集群部署有如下优点和特性:

  1. 集群管理和Docker Engine集成

  2. 分散式设计,Swarm分为Manager,Worker, Manager节点故障不会影响Worker节点

  3. 期望的状态协调

  4. 多主机网络,overlay网络支撑不同主机之间容器通信

  5. 服务发现

  6. 负载平衡:集群节点负载均衡、服务容器负载均衡

  7. 滚动更新、失败策略

业务模型角度

  【Stack、Service、Container模型】定义了适用于生产的应用架构(支持副本集、重启策略、滚动更新、更新、回滚策略)

  • task是Docker Swarm中最小部署单位,task与容器是一对一的关系

  • service是一个或一组容器在生产环境的预期状态(也可说是一组task的集合),在Worker节点上执行;有两种模式(对应下面docker-stack.yml-deploy-mode配置节)

    • (默认)replicated: 指定容器数量

    • global: 每个节点一个容器(容器数量由可用节点决定) 

  • 服务发现(外部客户端连接到Swarm中暴露的服务),有两种模式(对应下面docker-stack.yml-deploy-endpoint_mode)

    • (默认)vip:  Docker Swarm为每个服务分配1个虚拟ip,服务后有多少节点、服务请求到哪个节点容器对于客户端是透明的,也就是由Docker Swarm负载均衡服务内容器

    • dnsrr: Docker Swarm 为每个服务建立DNS记录,返回可用容器的ip列表, 客户端直接请求其中一个ip, 这种方式一般用于自建负载均衡器

部署模型角度

  Docker Swarm以多主机模型支撑业务,对于开发者来说, 一个节点或多节点部署的配置流程是类似的。

Docker Swarm有3个重要的网络概念:

①  overlay network:覆盖物网络,在Docker宿主机底层网络之上搭建的分布式网络, 支撑不同主机之间容器的通信。

在初始化或刚加入Swarm集群时,会创建以下ingress、docker-gwbridge网络

②  ingress network:入口网络,是一种特殊的overlay网络,外部客户端访问集群暴露的服务,在入口负载均衡(存在Swarm loadbancer将请求路由到可用节点容器)。

③  docker-gwbridge: 将overlay网络上容器连接到docker宿主机的网络。

以上可选配置都可以在docker-compose.yml 版本3官方文档找到对应的配置字段:

deploy:  endpoint_mode: 服务发现的方式:vip、 dnsrr labels:为服务指定的标签 mode:replicated、global replicas:实例数量 resources:配置资源 restart_policy:重启策略 update_config:  服务更新策略  parallelism:同时更新容器数量  delay:容器组更新的间隔时间  failure_action:  更新失败的操作:continue、rollbak,pause(默认)  monitor:监视更新失败的等待时间  max_failure_ratio: 更新的失败容错率  order:操作策略:stop-first、start-first rollback_config:回滚策略    ...同上...

走向集群

改造目标

  • 三个服务-->nginx--> receiver-->app,容器之间通过{webnet} overlay网络通信;

  • nginx开放外部访问端口80和8080,关注ingress网络

  • receiver、app服务需要访问宿主机上搭建的Redis,关注docker-gwbridge网络

一般两个步骤:① 搭建集群   ② 发布服务

P1 搭建Docker Swarm集群

单节点/多节点的初始化方式:参考docker swarm  -- help指令;

集群节点的管理:参考docker  node --help指令


$ docker swarm --help
Usage:  docker swarm COMMAND
Manage SwarmCommands:ca          Display and rotate the root CAinit        Initialize a swarmjoin        Join a swarm as a node and/or managerjoin-token  Manage join tokens,  如果忘记Token,可以执行这个参数leave       Leave the swarmunlock      Unlock swarmunlock-key  Manage the unlock keyupdate      Update the swarm

P2  docker stack发布服务

可使用docker service create方式创建服务,

个人偏好定义docker-stack.yml文件发布。

下面在生产部署中追加的production.yml

version: "3.7"
services:proxy:networks:- webnetreceiver:deploy:replicas: 1 restart_policy:condition: on-failurenetworks:- webnetapp:deploy:replicas: 2restart_policy:condition: on-failureupdate_config:parallelism: 1delay: 5sorder: stop-firstnetworks:- webnet
networks:webnet:
# docker stack不加载同目录下的.env环境变量文件,原有适用于docker-compose工具的yml文件可采用变通方法
docker stack deploy -c <(docker-compose -f docker-stack.yml -f production.yml config) eqidstack

服务部署效果:注意其中的Ports指的是 服务对外暴露的端口

#docker stack ls:
NAME           SERVICES     ORCHESTRATOR
eqidstack      3       Swarm#docker service ls:
ID      NAME        MODE       REPLICAS       IMAGE     PORTS
jml6ecfa330r    eqidstack_app         replicated    2/2       12205500/eqidmanager:master
3381stpkirgj    eqidstack_proxy        replicated    1/1     nginx:latest              *:80->80/tcp, *:8080->8080/tcp
vhz4ef8p4ffp    eqidstack_receiver     replicated    1/1     12205500/eqidreceiver:master

可通过

docker network inspect ingress 验证容器eqidstack_proxy.1连接到ingress网络;

docker network inspect eqidstack_webnet 验证有4个容器连接到overlay网络

P+ 不停服更新/不停服扩容

手动更新服务:docker service update  [opton]  {some_service_name}

为{eqidstack_proxy}服务添加 [重启策略]

手动扩容:docker service scale [option] {service=replicas}

将{eqidstack_proxy}服务扩容为2容器

实例解读Docker Swarm相关推荐

  1. [头脑风暴] 解读Docker Bridge网络模型

    背景 这几天在研究Kubernetes, 遇到一个有意思的nodejs镜像:luksa/kubia # 不带端口映射启动容器 docker run -it -d luksa/kubia # 连接到默认 ...

  2. Docker+Swarm实例配置 -三主一从

    常用命令: # 初始化一个swarm docker swarm init # 指定初始化ip地址节点 docker swarm init --advertise-addr 管理端IP地址 # 去除本地 ...

  3. 容器管理大战:Kubernetes vs.Docker Swarm与Amazon ECS

    Container Orchestration: 快速入门 自20世纪70年代以来,容器技术就已经出现,但直到2013年Docker首次亮相后才开始发挥作用.从那时起,容器已经流行起来:它们正在显著地 ...

  4. Docker(六):Docker 三剑客之 Docker Swarm

    实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...

  5. Docker swarm - 使用体验 1+2

    背景 凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性.诸如: Swarm模式,容器集群的健康检查, ...

  6. Docker Swarm建立服务器集群

    Docker Swarm建立服务器集群 一.Docker Swarm简介 1. 集群模式 2. 管理节点--Manager 二.Docker Swarm的配置及使用 三.Docker Service向 ...

  7. docker swarm的应用----docker集群的构建

    一.docker安装 这里我们安装docker-ce 的18.03版本 yum    -y remove docker  删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...

  8. 别了,Docker Swarm !你好,K8s !

    毫无疑问,Kubernetes已经成为容器编排事实标准.除了已经拥抱Kubernetes的Google.BAT.京东.奇虎360等巨头大厂外,更多的企业也都在向Kubernetes迁移.容器技术大势所 ...

  9. Docker swarm 笔记

    防火墙开放端口: TCP port 2377为集群管理通信 TCP and UDP port 7946 为节点间通信 UDP port 4789 为网络间流量 创建attachable network ...

最新文章

  1. python学多久可以接单-零基础小白多久能学会python
  2. Android权限申请的学习实践
  3. OS--进程间通信详解(一)
  4. 使用LinkedHashMap的Code4ReferenceList最近使用(LRU)实现
  5. 走出浮躁的泥沼:浮躁的社会原因 控制好自己的物欲
  6. mysql 主键 最佳实践_设计套路:Mysql主键的选取
  7. Win10推荐一款Terminal
  8. Unsafe in Java
  9. Git的使用--如何将本地项目上传到Github(两种简单、方便的方法)
  10. 51单片机8位流水灯左移实现(比较简短)
  11. 大学计算机python教材答案_大学计算机python答案
  12. 学好机器学习需要哪些数学知识?
  13. 电视盒子刷linux树莓派,变废为宝二:闲置“树莓派”开发板秒变电视盒子!
  14. ajax 传递对象 返回状态500
  15. 注册表的使用-入门篇
  16. 你妈给你介绍对象,你说自己new一个 | 程序员母亲节快乐
  17. foxmail和outlook2007邮件如何互相导入?
  18. 什么是服务器丢包?恒讯科技教你如何解决
  19. DeviceNet概要
  20. 背光(逆光)是什么?

热门文章

  1. python 调用另一个py_Python打包:setuptools与setup.py/.cfg入门简介
  2. oracle unpivot 索引_oracle pivot 和 unpivot 函数的使用
  3. 锤子t1重置后怎么显示无服务器,解决锤子手机smartisanT1关机后无法正常开机(附带刷机教程图文)...
  4. linux按括号截取字符串,Linux作业4
  5. 梦幻飞屋创意房产海报,温馨画面,梦中的家园
  6. python 如何封装成so_python打包成so文件
  7. Python里面使用的容器
  8. SpringMVC 的总结
  9. Ubuntu 18.04: Debug package with debug symbol
  10. [译转] eBPF 概念和基本原理