转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/71331664
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
实际生产中,应用由各种相互依赖的服务(Service)组成。在Docker中,服务的集合称为栈。栈的编排同样在容器编排配置文件中定义,只是定义了多个服务而已。
首先基于之前博客的内容添加一个可视化服务观察集群是如何调度容器:
# 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格式的详细信息。
使用的是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的博客)或者为这篇文章点赞,谢谢!