美文网首页
Docker学习(14) 使用Docker Stack部署应用(

Docker学习(14) 使用Docker Stack部署应用(

作者: August________ | 来源:发表于2019-11-15 00:22 被阅读0次

    Docker学习(14) 使用Docker Stack部署应用(上)

    • Docker Stack:可以解决大规模情境下多服务的部署和管理。
    • docker stack 提供了期望状态、滚动升级、简单易容、易扩容,健康检查等特性简化了应用的管理。

    使用Docker Stack 部署应用——简介

    • Stack能够在单个声明文件中定义复杂的多服务应用。
    • Stack提供简单的方式来部署应用和管理其完整的生命周期:初始化部署——>健康检查——>扩容——>更新——>回滚
    • 在compose文件里定义应用,通过docker stack deploy来完成部署和管理。
    • compose文件中包含构建应用所需的完整服务栈,包括卷、网络、安全以及应用所需的其他基础架构
    • stack 是基于docker swarm 之上来完成部署的

    使用Docker stack部署应用——详解

    • 从系统的架构来说:Stack 位于docker 应用层级的最顶端,stack基于服务进行构建的,而服务是基于容器构建的。

    顺序步骤

    • 简单应用
    • 深入分析stack文件
    • 部署应用
    • 管理应用

    简单应用

    $ git clone https://github.com/dockersamples/atsea-sample-shop-app 
    正克隆到 'atsea-sample-shop-app'...
    remote: Enumerating objects: 25, done.
    remote: Counting objects: 100% (25/25), done.
    remote: Compressing objects: 100% (25/25), done.
    
    • 重点查看stack文件:docker-stack.yml,该文件定义了应用及依赖
    lhf@lhf-virtual-machine:~/docker/stack$ ls atsea-sample-shop-app/
    app              database                docker-compose.yml  payment_gateway  reverse_proxy
    atsea_store.png  devsecrets              docker-stack.yml    README.md        windows
    checkout.png     docker-compose-dev.yml  LICENSE             REST.md
    $ cat atsea-sample-shop-app/docker-stack.yml
    version: "3.2"
    
    services:
      reverse_proxy:
        image: dockersamples/atseasampleshopapp_reverse_proxy
        ports:
          - "80:80"
          - "443:443"
        secrets:
          - source: revprox_cert
            target: revprox_cert
          - source: revprox_key
            target: revprox_key
        networks:
          - front-tier
    
      database:
        image: dockersamples/atsea_db
        environment:
          POSTGRES_USER: gordonuser
          POSTGRES_DB_PASSWORD_FILE: /run/secrets/postgres_password
          POSTGRES_DB: atsea
        networks:
          - back-tier
        secrets:
          - postgres_password
        deploy:
          placement:
            constraints:
              - 'node.role == worker'
    
      appserver:
        image: dockersamples/atsea_app
        networks:
          - front-tier
          - back-tier
          - payment
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == worker'
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 3
            window: 120s
        secrets:
          - postgres_password
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8001:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          update_config:
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == manager'
    
      payment_gateway:
        image: dockersamples/atseasampleshopapp_payment_gateway
        secrets:
          - source: staging_token
            target: payment_token
        networks:
          - payment
        deploy:
          update_config:
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == worker'
              - 'node.labels.pcidss == yes'
    
    networks:
      front-tier:
      back-tier:
      payment:
        driver: overlay
        driver_opts:
          encrypted: 'yes'
    
    secrets:
      postgres_password:
        external: true
      staging_token:
        external: true
      revprox_key:
        external: true
      revprox_cert:
    
    
    • 该文件定义了4个顶级关键词
      • version:代表了Compose文件格式的版本
      • services:定义了组成当前应用的服务有哪些
      • networks:列出里必要的网络
      • secrets:定义了应用用到的网络

    深入分析Stack文件

    • Stack文件,唯一的要求是version:一般需要的版本是3.0以及以上版本
    • Docker根据stack文件部署应用的时候,首先检查并创建network:
    1. 网络
    networks:
      front-tier:
      back-tier:
      payment:
        driver: overlay
        driver_opts:
          encrypted: 'yes'
    
    • 该文件定义了三个网络:networks: front-tier、back-tier、payment:,默认网络采用的是overlay驱动,新建对应的覆盖网络、但是payment网络比较特殊。需要数据层加密
      • 加密数据层的两种方式:
        • 在docker network create 命令中指定 -o encrypted参数。
        • 在stack文件中driver_opts之下指定: encrypted: 'yes'
    1. 密钥
    • 密钥属于顶级对象:在stack文件中定义了4个:
    secrets:
      postgres_password:
        external: true
      staging_token:
        external: true
      revprox_key:
        external: true
      revprox_cert:
        external: true
    
    
    • 4个密钥都被定义了external:在stack部署之前,这些密钥必须存在。
    1. 服务
    • 每个服务都是JSON集合。

    reverse_proxy服务:

    reverse_proxy:
        image: dockersamples/atseasampleshopapp_reverse_proxy
        ports:
          - "80:80"
          - "443:443"
        secrets:
          - source: revprox_cert
            target: revprox_cert
          - source: revprox_key
            target: revprox_key
        networks:
          - front-tier
    
    
    • 该服务定义了镜像、端口、密钥、网络

    • image:定义用于构建服务的docker镜像

    • Docker Stack 与Docker Compose的区别是:Stack不支持构建,所以部署stack之前,所以镜像必须提前构建。

    • ports:定义了两个映射

      • 80:80:将swarm节点的80端口映射到每个服务的80端口
      • 443:443:将swarm节点的443端口映射到每个服务的433端口
      • 所有端口默认采用的Ingress模式,意味这集群的每个节点对应的端口都会被映射并且可以访问。
    • secrets:定义了两个密钥:revprox_cert和revprox_key

      • 密钥以普通文件的形式挂载到服务副本当中
    • networks:确保所有副本都连接到front-tier当中

    database服务

    • 数据库服务在stack问中定义了:镜像、网络、密钥以及环境变量和部署约束。
      database:
        image: dockersamples/atsea_db
        environment:
          POSTGRES_USER: gordonuser
          POSTGRES_DB_PASSWORD_FILE: /run/secrets/postgres_password
          POSTGRES_DB: atsea
        networks:
          - back-tier
        secrets:
          - postgres_password
        deploy:
          placement:
            constraints:
              - 'node.role == worker'
    
    
    
    • envirnment:允许在副本中注入环境变量
      • POSTGRES_USER: gordonuser:数据库用户
      • POSTGRES_DB_PASSWORD_FILE: /run/secrets/postgres_password:数据密码位置
      • POSTGRES_DB: atsea:数据库服务名称
    • deploy :定义部署约束:保证该服务只在swarm集群的work节点之上
      • 部署约束是一种拓扑感知定时任务:5种方式进行调度
        • 节点ID:node.id == 02p4kw2uuw1a
        • 节点名称: node.hostname == wrk-12
        • 节点角色: node.role == manager
        • 节点引擎标签: engine.labels.operatingsystem == ubuntu16.04
        • 节点自定义标签: node.labels.zone == prod1

    appserver服务

      appserver:
        image: dockersamples/atsea_app
        networks:
          - front-tier
          - back-tier
          - payment
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == worker'
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 3
            window: 120s
        secrets:
          - postgres_password
    
    
    • deploy:新增内容
      • replicas: 2期望服务的副本数为2
      • update_config:定义服务在滚动升级的具体操作
      • restart_policy:针对容器异常退出的容器策略

    visualizer服务

     visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8001:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          update_config:
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == manager'
    
    
    • visualizer:该服务定义了镜像,端口映射规则,更新配置以及部署约束,还挂载了一个指定卷,定义了容器优雅的停止方式

    payment_gateway服务

      payment_gateway:
        image: dockersamples/atseasampleshopapp_payment_gateway
        secrets:
          - source: staging_token
            target: payment_token
        networks:
          - payment
        deploy:
          update_config:
            failure_action: rollback
          placement:
            constraints:
              - 'node.role == worker'
              - 'node.labels.pcidss == yes'
    
    
    • payment_gateway服务:定义镜像,密钥,网络,以及部署约束。

    • ,,

    相关文章

      网友评论

          本文标题:Docker学习(14) 使用Docker Stack部署应用(

          本文链接:https://www.haomeiwen.com/subject/rixjictx.html