转载请注明原始出处:http://blog.youkuaiyun.com/a464057216/article/details/71331664
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
栈Stack
实际生产中,应用由各种相互依赖的服务(Service)组成。在Docker中,服务的集合称为栈。栈的编排同样在容器编排配置文件中定义,只是定义了多个服务而已。
添加visualizer
首先基于之前博客的内容添加一个可视化服务观察集群是如何调度容器:
# Written by: 优快云 - Mars Loo的博客
version: "3"
services:
web:
image: hub.c.163.com/learndocker/learndocker:v1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
visualizer:
image: hub.c.163.com/learndocker/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
上面通过volumes
属性赋予容器访问宿主机socket文件的权限,placement
属性规定容器只能在swarm manager上运行。visualizer
镜像是Docker Hub上的dockersamples/visualizer
镜像,由于国内网络Pull比较麻烦,我已经Push到了网易蜂巢上,大家直接下载使用即可。
像之前一样启动应用:
# Written by: 优快云 - Mars Loo的博客
$ docker stack deploy -c docker-compose.yml learndocker
Creating network learndocker_webnet
Creating service learndocker_web
Creating service learndocker_visualizer
浏览器访问swarm内任何一个机器的8080端口即可观察到集群中容器的分布情况:
visualizer
工具是一个依赖很少的服务,任何集群中均可以安装此服务来分析集群中容器的部署情况,点击每个容器可以弹出容器的JSON格式的详细信息。
添加Redis
使用的是Docker hub上的最新版本的Redis,同样我将他Push到了网易蜂巢上:
version: "3"
services:
web:
image: hub.c.163.com/learndocker/learndocker:v1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
visualizer:
image: hub.c.163.com/learndocker/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: hub.c.163.com/learndocker/redis:latest
ports:
- "6379:6379"
volumes:
- "./data:/data"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
重新部署服务栈之前,先建立与docker-compose.yml
同级的data
目录:
# Written by: 优快云 - Mars Loo的博客
$ mkdir -p data
$ docker stack deploy -c docker-compose.yml learndocker
Updating service learndocker_visualizer (id: lll8kq41ym5jny0bj8c1h8t8s)
Updating service learndocker_redis (id: srrj6xhrxrjdcuqteuyuvttoo)
Updating service learndocker_web (id: bnhhgifdy6vho2vngnv76rpeu)
挂载本地./data
到容器中的/data
目录(即Redis存储数据的目录),是为了防止重新部署应用时Redis数据被清空,指定运行在swarm manager保证Redis每次启动都使用同一个文件系统。
查看Docker集群内所有节点:docker node ls
删除Docker集群内某个节点:docker node rm <node ID>
接下来请继续学习容器间的网络通信,了解Docker容器间如何完成信息交互。
如果觉得我的文章对您有帮助,欢迎关注我(优快云:Mars Loo的博客)或者为这篇文章点赞,谢谢!