纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Docker Swarm 服务编排 Docker Swarm 服务编排之命令详解

Bigberg   2021-05-25 我要评论
想了解Docker Swarm 服务编排之命令详解的相关内容吗Bigberg在本文为您仔细讲解Docker Swarm 服务编排的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Docker,Swarm,服务编排,Docker,服务编排下面大家一起来学习吧

一、简介

  Docker有个编排工具docker-compose可以将组成某个应该的多个docker容器编排在一起同时管理同样在Swarm集群中可以使用docker stack 将一组相关联的服务进行编排管理

  Docker stack 也是一个yaml文件和一份docker-compose.yml文件差不多指令也基本一致但是与compose相比其不支持build、links和network_modeDocker stack有一个新的指令deploy

  注:stack不支持的指令

  

二、Deploy

  Deploy是用来指定swarm服务部署和运行时的相关配置并且只有使用docker stack deploy 部署swarm集群时才会生效如果使用docker-compose up 或者docker-compose run时该选项会被忽略要使用deploy选项compose-file中version版本要在3或3+  

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  (1)ENDPOINT_MODE

   指定swarm服务发现的模式

  • endpoint_mode: vip - Docker为swarm集群服务分配一个虚拟IP(VIP)作为客户端到达集群服务的“前端”Docker 在客户端和可用工作节点之间对服务的请求进行路由而客户端不用知道有多少节点参与服务或者是这些节点的IP/端口(这是默认模式)
  • endpoint_mode: dnsrr -

DNS轮询(DNSRR)服务发现不使用单个虚拟IP Docker为服务设置DNS条目使得服务名称的DNS查询返回一个IP地址列表并且客户端直接连接到其中的一个如果您想使用自己的负载平衡器或者混合Windows和Linux应用程序则DNS轮询功能非常有用

  注:version 3.3+

version: "3.3"
 
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip
 
  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr
 
volumes:
  db-data:
 
networks:
  overlay:

  (2)LABELS  

  指定服务的标签这些标签仅在服务上设置而不在服务的任何容器上设置  

version: "3"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

  要改为在容器上设置标签请在deploy之外使用标签键

version: "3"
services:
  web:
    image: web
    labels:
      com.example.description: "This label will appear on all containers for the web service"

  (3)MODE

  全局(每个群集节点只有一个容器)或副本(指定容器的数量)默认值被副本 

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global

  (4)PLACEMENT

  指定约束和偏好设置 

version: '3'
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - node.role == manager
          - engine.labels.operatingsystem == ubuntu 14.04
        preferences:
          - spread: node.labels.zone

  (5)REPLICAS

  如果服务是副本模式(默认模式)可以指定该服务运行的容器数量 

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6

  (6)RESOURCES

  资源限制配置 

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

  在下例中redis服务限制使用不超过50M的内存和0.50(50%)的可用处理时间(CPU)并且拥有20M的内存和0.25个CPU时间(总是可用)  

  (7)RESTART_POLICY

  配置在容器退出时是否并如何重启容器取代restart指令

  • condition :none、on-failure和any(默认any)
  • delay :在重启尝试之间等待多久(默认0)
  • max_attempts :尝试重启的次数(默认一直重启直到成功)
  • window : 在确实一个重启是否成功前需要等待的窗口时间 
version: "3"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

  (8)UPDATE_CONFIG

  配置服务如何升级

  • parallelism:同一时间升级的容器数量
  • delay:容器升级间隔时间
  • failure_action:升级失败后的动作(continue、rollback和pause默认pause)
  • monitor:更新完成后确实成功的时间(ns|us|ms|s|m|h)
  • (默认0s)max_failure_ratio:更新期间允许的失败率o
  • rder:更新期间的操作顺序停止优先(旧任务在开始新任务之前停止)或者先启动(首先启动新任务并且正在运行的任务短暂重叠)(默认停止优先)注意:只支持v3.4及更高版本  
version: '3.4'
services:
  vote:
    image: dockersamples/examplevotingapp_vote:before
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
        order: stop-first

 (9)depends_on

  表示服务之间的依赖关系  

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

  (10)dns  

  自定义DNS服务器可以是单个值或列表 

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

  (11)dns_search  

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

  (12)environment  

  添加环境变量您可以使用数组或字典任何布尔值;真/假是/否需要用引号括起来以确保它们不被YML解析器转换为True或False 

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
 
environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

  (13)expose

  开放容器的端口而不用在主机上暴露端口它们只能被相关联的服务获取只能指定内部端口 

expose:
 - "3000"
 - "8000"

相关文章

猜您喜欢

  • Java PageHelper分页无效 Java中PageHelper分页后对list操作导致分页无效

    想了解Java中PageHelper分页后对list操作导致分页无效的相关内容吗He Ain''''t Hero在本文为您仔细讲解Java PageHelper分页无效的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,PageHelper,分页无效,PageHelper分页下面大家一起来学习吧..
  • 微信小程序贪吃蛇游戏 微信小程序实现贪吃蛇游戏

    想了解微信小程序实现贪吃蛇游戏的相关内容吗Hello world&&在本文为您仔细讲解微信小程序贪吃蛇游戏的相关知识和一些Code实例欢迎阅读和指正我们先划重点:微信小程序,贪吃蛇下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式