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