扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关Docker堆栈如何管理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联致力于互联网网站建设与网站营销,提供成都网站设计、网站制作、外贸营销网站建设、网站开发、seo优化、网站排名、互联网营销、微信小程序定制开发、公众号商城、等建站开发,创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。具体如下:
了解分布式应用程序层次结构的顶层:堆栈。堆栈是一组相互关联的服务,它们可以共享依赖关系,并且可以一起协调和缩放。单个堆栈能够定义和协调整个应用程序的功能。
添加一个新服务并重新部署
将服务添加到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: - webnet networks: 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: - webnet networks: 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堆栈如何管理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流