74.Docker的栈 - Go语言中文社区

74.Docker的栈


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

栈Stack

实际生产中,应用由各种相互依赖的服务(Service)组成。在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:
      - webnet
networks:
  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 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: CSDN - 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容器间如何完成信息交互。

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/a464057216/article/details/71331664
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:29:55
  • 阅读 ( 1394 )
  • 分类:docker

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢