zoukankan      html  css  js  c++  java
  • docker知识9---docker statck

    一、docker stack介绍

      大规模场景下的多服务部署和管理是一件很难的事情。
      Docker Stack 为解决该问题而生,Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。
      docker stack部署服务流程:在 Compose 文件中定义应用,然后通过 docker stack deploy 命令完成部署和管理。

       Usage: docker stack [OPTIONS] COMMAND

      Options:
      -  -orchestrator string Orchestrator to use (swarm|kubernetes|all)
      Commands:
        deploy    Deploy a new stack or update an existing stack
        ls      List stacks
        ps     List the tasks in the stack
        rm      Remove one or more stacks
        services    List the services in the stack

    二、dockers stack案例

     docker stack发布vote服务

    cat <<eof> docker-compose-vote.yml
    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]
    
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - 5000:80
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
    
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - 5001:80
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 1
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
          placement:
            constraints: [node.role == manager]
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "1080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:
    eof
    docker stack deploy example --compose-file=docker-compose-vote.yml
    docker stack ls
    docker stack services example
    

     visualizer为swarm集群可视化服务,可通过浏览器查看服务分布在哪个node。

     

     投票结果页面内容无法加载,其原因为:程序的使用了某个Android API,查看源码发现这个API的URL无法访问。

     

      

    三、dockers stack故障排查

    问题1:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --bundle-file docker-compose-wordpress.yml
    "--bundle-file" is only supported on a Docker daemon with experimental features enabled

    原因分析:dockerd不支持。

    解决方法:修改配置并重启docker。

    问题2:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --bundle-file docker-compose-wordpress.yml
    Loading bundle from docker-compose-wordpress.yml
    Error reading docker-compose-wordpress.yml: JSON syntax error at byte 1: invalid character 'v' looking for beginning of value

    原因分析:docker-compose-wordpress.yml中version错误。

    解决方法:修改docker-compose-wordpress.yml即可。

    问题3:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --compose-file=docker-compose.yml
    Creating service wordpress_web
    failed to create service wordpress_web: Error response from daemon: rpc error: code = FailedPrecondition desc = service needs ingress network, but no ingress network is present

    原因分析:ingress网络被删除;

    解决方法:创建ingress网络即可。

    docker network create -d overlay --opt com.docker.network.mtu=1200 --ingress my-ingress

  • 相关阅读:
    20201304杨淑钰+快速浏览教材
    20201304 自我介绍
    熟悉编程语言
    俄罗斯方块游戏代码的改写
    2020 -2021-1 20201319 《信息安全专业导论》第八周学习总结
    如何学好编程
    2020-2021-1 20201319 《信息安全专业导论》第七周学习总结
    2020-2021-1 20201319 《信息安全专业导论》第六周学习总结
    实现进制转换伪代码
    斐波那契数列递归实现
  • 原文地址:https://www.cnblogs.com/chalon/p/15124887.html
Copyright © 2011-2022 走看看