74.Docker的服务栈

来源:互联网 发布:淘宝 手办时光机 编辑:程序博客网 时间:2024/05/21 17:09

    • 添加visualizer
    • 添加Redis

转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/71331664

实际生产中,应用由各种相互依赖的服务组成。在Docker中,服务的集合称为栈。栈的编排同样在容器编排配置文件中定义,只是定义了多个服务而已。

添加visualizer

首先基于之前博客的内容添加一个可视化服务观察集群是如何调度容器:

# Written by: CSDN - 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:      - webnetnetworks:  webnet:

上面通过volumes属性赋予容器访问宿主机socket文件的权限,placement属性规定容器只能在swarm manager上运行。visualizer镜像是Docker Hub上的dockersamples/visualizer镜像,由于国内网络Pull比较麻烦,我已经Push到了网易蜂巢上,大家直接下载使用即可。
像之前一样启动应用:

# Written by: CSDN - Mars Loo的博客$ docker stack deploy -c docker-compose.yml learndockerCreating network learndocker_webnetCreating service learndocker_webCreating service learndocker_visualizer

浏览器访问swam manager机器的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:      - webnetnetworks:  webnet:

重新部署服务栈之前,先建立与docker-compose.yml同级的data目录:

# Written by: CSDN - Mars Loo的博客$ docker stack deploy -c docker-compose.yml learndockerUpdating 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容器间如何完成信息交互。

如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

1 0
原创粉丝点击