第5部分:堆栈 | Part 5: Stacks
- 1:概况介绍
- 2:集装箱
- 3:服务
- 4:成群
- 5:堆叠
- 6:部署应用程序
先决条件
- 安装Docker版本1.13或更高版本。
- 弄到码头组成如上文所述第三部分先决条件...
- 弄到码头机械如上文所述第四部分先决条件...
- 阅读第1部分中的方向。
- 学习如何在第2部分中创建容器。
- 确保您已经发布了
friendlyhello
你创造的形象将其推送到注册表.我们将在这里使用这个共享的图像。
- 确保你的图像作为一个部署的容器。运行此命令,在您的信息开槽
username
,repo
和tag
:docker run -p 80:80 username/repo:tag
,然后访问http://localhost/
。
- 有一份你的
docker-compose.yml
从第3部分手巧。
- 确保你安装的机器第4部分已经准备好了。跑
docker-machine ls
来验证这个。如果机器停止运行docker-machine start myvm1
引导经理,然后是docker-machine start myvm2
启动工人。
- 让你创造的蜂群第4部分准备好了。跑
docker-machine ssh myvm1 "docker node ls"
来验证这个。如果群集出现,两个节点都将报告一个ready
现状。如果没有,请重新初始化蜂群,并按照建立你的蜂群...导言在第4部分,您了解了如何设置一个群集,这是一个运行Docker的机器集群,并在其中部署了一个应用程序,容器在多台机器上协同运行。在第5部分中,您将到达分布式应用程序层次结构的顶端:堆叠堆栈是一组相互关联的服务,它们共享依赖关系,可以编排和缩放在一起。单个堆栈能够定义和协调整个应用程序%28的功能,尽管非常复杂的应用程序可能需要使用多个堆栈%29。一些好消息是,从技术上讲,从第3部分开始,您就一直在使用堆栈,那时您创建了一个撰写文件并使用了docker stack deploy
但是,这是运行在单个主机上的单个服务堆栈,而这通常不是生产过程中发生的情况。在这里,您将学习到的知识,使多个服务相互关联,并运行在多台机器上。你做得很好,这是你的家添加新服务并重新部署将服务添加到我们的docker-compose.yml
档案。首先,让我们添加一个免费的可视化服务,让我们看看我们的集群是如何调度容器的。
- 敞开
docker-compose.yml
在编辑器中,并将其内容替换为以下内容。一定要更换username/repo:tag
还有你的图像细节。
版本:“3”服务:web:#替换用户名/repo:标记与您的名称和图像详细信息图片:username/repo:标签部署:副本:5重新启动[医]策略:条件:失败资源:限制:cpu:“0.1”内存:50m端口:-“80:80”网络:-webnet可视化器:图像:dockersames/可视化器:稳定端口:-“8080:8080”卷:-“/var/run/docker.sock:/var/run/docker.sock”部署:放置:约束:node.ole==Manager网络:-网络网络:
这里唯一的新发现是对等服务web
,命名visualizer
.你会在这里看到两件新的事情:volumes
键,使可视化器访问主机的Docker套接字文件,并且placement
关键,确保该服务只在群集管理器上运行,而不是在员工身上运行。那是因为这个容器Docker创建的开源项目,显示在图表中的群集上运行的Docker服务。
稍后我们将更多地讨论位置限制和卷。
- 复制这个新的
docker-compose.yml
把文件交给蜂群经理,myvm1
* 码头机scp码头-合成物.yml myvm 1:~
- 重新运行
docker stack deploy
命令,所有需要更新的服务都将被更新:
$ docker-machine ssh myvm1“docker stack deploy -c docker-compose.yml getstartedlab”更新服务getstartedlab_web(id:angi1bf5e4to03qu9f93trnxm)更新服务getstartedlab_visualizer(id:l9mnwkeq2jiononb5ihz9u7a4)
- 看看可视化器。您
visualizer
在端口8080 上运行的Compose文件中看到。通过运行获取其中一个节点的IP地址docker-machine ls
。转到8080端口的IP地址,您将看到可视化器正在运行:您希望管理器上运行
![](https://ask.qcloudimg.com/http-save/devdocs/ut06syno1f.png)
的单个副本visualizer
,并且5个实例web
遍布整个群集。您可以通过运行来验证此可视化效果docker stack ps <stack>
:docker-machine ssh myvm1“docker stack ps getstartedlab”可视化器是一个独立的服务,可以在任何包含它的应用程序中运行。它不依赖于其他任何东西。现在让我们创建一个服务呢 有一个依赖项:Redis服务将提供一个访问者counter.Persist dataLet再次通过相同的工作流程来添加一个Redis数据库来存储应用程序数据。
- 保存这个新的
docker-compose.yml
文件,它最终添加了Redis服务。一定要更换username/repo:tag
还有你的图像细节。
版本:“3”服务:web:#替换用户名/repo:标记与您的名称和图像详细信息图片:username/repo:标签部署:副本:5重新启动[医]策略:条件:失败资源:限制:cpu:“0.1”内存:50m端口:-“80:80”网络:-webnet可视化器:图像:dockersames/可视化器:稳定端口:-“8080:8080”卷:-“/var/run/docker.sock:/var/run/docker.sock”部署:放置:约束:node.ole==Manager网络:-webnetredis:映像:redis端口:-“6379:6379”卷:-/data:/data部署:放置:约束:node.ole==Manager网络:-网络网络:
Redis在Docker图书馆有一个官方形象,并已被授予短图片。image
名称...redis
所以不username/repo
这里的记号。Redis端口6379已经由Redis预先配置,以便从容器公开到主机,在我们的撰写文件中,我们将它从主机公开给全世界。因此,如果您愿意,您可以将任何节点的IP输入到RedisDesktopManager中,并管理这个Redis实例。
最重要的是,在redis
使数据在此堆栈的部署之间保持不变的规范:
- `redis` always runs on the manager, so it’s always using the same filesystem.
- `redis` accesses an arbitrary directory in the host’s file system as `/data` inside the container, which is where Redis stores data.
这将在主机的物理文件系统中为Redis数据创建一个“真相源”。没有这个,Redis就会将其数据存储在/data
在容器的文件系统中,如果重新部署容器,它就会被清除掉。
这一真相来源有两个组成部分:
- The placement constraint you put on the Redis service, ensuring that it always uses the same host.
- The volume you created that lets the container access `./data` (on the host) as `/data` (inside the Redis container). While containers come and go, the files stored on `./data` on the specified host will persist, enabling continuity.
您已经准备好部署新的Redis使用堆栈。
- 创建一个
./data
管理器上的目录: $docker-机器ssh myvm 1“mkdir./data”
- 复制新的
docker-compose.yml
与docker-machine scp
*
$docker-机器SCP码头-Compose.yml myvm 1:~
- 跑
docker stack deploy
再来一次。 $docker-Machine ssh myvm 1“坞库部署-c停靠库-come.yml getstartedlab”
- 检查您的节点之一的网页%28例如。
http://192.168.99.101
%29,您将看到访问者计数器的结果,该计数器现在是实时的,并在Redis上存储信息。
![](https://ask.qcloudimg.com/http-save/devdocs/m31c2ytnbq.png)
另外,检查节点的IP地址上端口8080处的可视化器,您将看到redis
与web
和visualizer
服务。
![](https://ask.qcloudimg.com/http-save/devdocs/wupgwoanea.png)
关于第6部分
概述(可选)
这是本页所涵盖内容的终端记录*
您了解到堆栈是相互关联的服务,所有这些服务都是协同运行的,而自本教程第三部分以来,您就一直使用堆栈。您了解到要向堆栈中添加更多服务,请将它们插入撰写文件中。最后,您了解到,通过使用位置约束和卷的组合,您可以为持久化数据创建一个永久的主页,这样当容器被拆卸和重新部署时,应用程序的数据就能存活下来。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com