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

 

posted on 2021-08-10 17:15  chalon  阅读(130)  评论(0编辑  收藏  举报