千家信息网

Docker堆栈如何管理

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Docker堆栈如何管理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:了解分布式应用程序层次结构的顶层:堆栈。堆栈是一组相互关
千家信息网最后更新 2026年11月02日Docker堆栈如何管理

这篇文章将为大家详细讲解有关Docker堆栈如何管理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体如下:

了解分布式应用程序层次结构的顶层:堆栈。堆栈是一组相互关联的服务,它们可以共享依赖关系,并且可以一起协调和缩放。单个堆栈能够定义和协调整个应用程序的功能。

添加一个新服务并重新部署

将服务添加到docker-compose.yml文件很容易,首先添加一个免费的可视化器服务,使我们能看到是如何调度容器。在编辑器中打开docker-compose.yml,并用下面的代码替换它的内容:

version: "3"services: web: # 用你的名称和镜像细节替换username/repo:tag image: username/repo:tag deploy:  replicas: 5  restart_policy:  condition: on-failure  resources:  limits:   cpus: "0.1"   memory: 50M ports:  - "80:80" networks:  - webnet visualizer: image: dockersamples/visualizer:stable ports:  - "8080:8080" volumes:  - "/var/run/docker.sock:/var/run/docker.sock" deploy:  placement:  constraints: [node.role == manager] networks:  - webnetnetworks: webnet:

这里唯一新增的就是名为visualizer的web对等服务,在这里可以看到两个新东西:volumes密钥,赋予visualizer访问Docker的主机套接字文件的权限,以及一个placement密钥,确保此服务只能在集群管理器上运行。这个由Docker创建的开源项目构建的容器可以显示集群上运行的Docker服务。

确保你的终端被配置为与myvm1进行通信,运行docker-machine ls列出机器,并确保已连接到myvm1,如果需要可以重新运行docker-machine env myvm1,然后运行给定的命令来配置终端。在管理器上重新运行docker stack deploy命令,任何需要更新的服务都将被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

在docker-compose.yml文件中可以看到,visualizer在端口8080上运行,通过运行docker-machine ls来获取其中一个节点的IP地址,转到8080端口的IP地址,将看到visualizer正在运行:

visualizer的单个副本按照预期在管理器上运行,并且网络的5个实例遍布整个集群,可以通过运行docker stack ps 来证实这个可视化:

$ docker stack ps getstartedlab

visualizer是一个独立的服务,可以在任何包含它的应用程序中运行,它不依赖于其他任何东西。现在创建一个具有依赖性的服务,Redis服务将提供访问者计数器。

数据持久化

再次通过相同的工作流程来添加一个用于存储应用程序数据的Redis数据库,保存这个新的docker-compose.yml文件,最后添加一个Redis服务:

version: "3"services: web: # 用你的名称和镜像细节替换username/repo:tag image: username/repo:tag deploy:  replicas: 5  restart_policy:  condition: on-failure  resources:  limits:   cpus: "0.1"   memory: 50M ports:  - "80:80" networks:  - webnet visualizer: image: dockersamples/visualizer:stable ports:  - "8080:8080" volumes:  - "/var/run/docker.sock:/var/run/docker.sock" deploy:  placement:  constraints: [node.role == manager] networks:  - webnet redis: image: redis ports:  - "6379:6379" volumes:  - /home/docker/data:/data deploy:  placement:  constraints: [node.role == manager] command: redis-server --appendonly yes networks:  - webnetnetworks: webnet:

Redis在Docker库中有一个官方镜像,并且已经被授予redis的简短镜像名称,所以在这里没有username/repo。Redis端口6379已经由Redis预先配置好,从容器中暴露给主机,在docker-compose.yml文件中,将它从主机暴露给外部,这样就可以为任何节点到Redis桌面管理器中,并管理这个Redis实例。

最重要的是,redis规范中有几件事情使数据在这个堆栈的部署之间持续存在:redis总是在管理器上运行,所以它总是使用相同的文件系统;redis在主机的文件系统中访问一个任意目录作为容器内部的/data,这是Redis存储数据的地方。总之,这是在Redis数据的主机物理文件系统中创建"真实来源"。如果没有这个,Redis将把它的数据存储在容器文件系统中的/data中,如果这个容器被重新部署的话,这些数据将被清除。

这个真实来源有两个组成部分:placement在Redis服务上的placement约束,确保它始终使用相同的主机;创建的volumes允许容器作为/data(在Redis容器内)访问/data(在主机上),在容器来来去去的时候,存储在指定主机上的/data文件将会持续存在,从而保持连续性。

在管理器上创建一个/data目录:

$ docker-machine ssh myvm1 "mkdir ./data"

确保终端被配置为与myvm1进行通信,运行docker-machine ls列出机器,并确保已连接到myvm1,如果需要可以重新运行docker-machine env myvm1,然后运行给定的命令来配置终端。在管理器上重新运行docker stack deploy命令,任何需要更新的服务都将被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

运行docker service ls以验证这三个服务是否按预期运行:

$ docker service ls

查看您的某个节点的网页,您将看到访客计数器的结果,该计数器现在已经存在并将信息存储在Redis上:

另外,使用任一节点的IP地址8080端口访问可视化器,将看到随web和visualizer服务一起运行的redis服务:

关于"Docker堆栈如何管理"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

运行 服务 管理 文件 容器 主机 数据 堆栈 存储 配置 命令 应用程序 程序 端口 系统 终端 节点 镜像 应用 更新 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网下的科技发展 齐家互联网科技 壹账通互联网科技 上海亿帐通互联网科技 互联网科技革命什么开始 互联网媒体平台算高科技产业 互联网科技大奖都有哪些公司 健康食品互联网创新科技园项目 如何创新互联网科技 四川慕妮娅互联网科技有限公司 卓翼科技产业互联网合作 黑云互联网科技有限公司 风投北京互联网科技 陕西云淼互联网科技公司 东营紫格互联网科技 互联网界的黑科技 广州三三互联网科技有限公司 北京品多多互联网科技有限公司 重庆科技产业互联网有哪些 知域互联网科技有限公司官网 互联网高科技 中智农互联网科技 A股互联网金融科技公司 朱啸虎曾投资哪些互联网科技企业 艺电能源互联网科技有限公司招聘 福仕德教育科技互联网 青岛易易互联网科技 互联网金融金融科技 平安好医生打造互联网科技医疗 网互联网络科技
0