摘要:介绍在第部分中,我们将扩展应用程序并启用负载平衡。运行您的新负载平衡应用程序在我们使用命令之前,我们先运行注意我们将在第部分中了解该命令的含义。无论如何,您将看到容器的更改,显示负载平衡在每个请求中,选择一个循环模式的个任务中的一个来响应。
介绍
在第3部分中,我们将扩展应用程序并启用负载平衡。为此,我们必须在分布式应用程序的层次结构中提升一个级别:服务。
Stack
Services (你在这里)
Container (涵盖在第2部分中)
关于服务在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果你想象一个视频分享网站,它可能包括一个用于在数据库中存储应用程序数据的服务,一个在用户上传某个东西后在后台进行视频转换的服务,一个为前端服务的服务,等等。
服务实际上只是“生产中的容器”。一个服务只运行一个镜像,但它将以镜像的方式运行——它应该使用的端口,容器应该运行多少个副本,这样服务具有它需要的容量等等——的方式进行了编码。扩展服务会改变运行该软件的容器实例的数量,为流程中的服务分配更多的计算资源。
幸运的是,使用Docker平台定义、运行和扩展服务很容易——只需编写docker-compose.yml文件。
你的第一个docker-compose.yml文件docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为。
docker-compose.yml将此文件保存为docker-compose.yml无论什么位置。确保您已经将在第2部分中创建的镜像推送到注册中心,更新这个yml文件,用你镜像中的内容替换username/repo:tag。
version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet networks: webnet:
docker-compose.yml告诉Docker做下面的事情:
从注册表中提取第2步中上传的图像。
将该映像的5个实例作为web服务运行,限制每个CPU使用最多10%的CPU(跨所有内核)和50MB RAM。
如果失败,立即重新启动容器。
将端口80映射到web的端口80。
指示web容器通过一个名为webnet的负载均衡网络共享端口80。(在内部,容器本身将在临时端口上发布到web的端口80。)
用默认设置定义webnet网络(这是一个负载均衡的覆盖网络)。
运行您的新负载平衡应用程序在我们使用docker stack deploy命令之前,我们先运行:
docker swarm init
注意:我们将在第4部分中了解该命令的含义。如果你不运行docker swarm init,你会得到一个错误,“这个节点不是一个群集管理器。”
现在,让我们来运行它。你必须给你的应用一个名字。在这里,它被设置为getstartedlab
docker stack deploy -c docker-compose.yml getstartedlab
我们的单一服务堆栈在一个主机上运行我们部署映像的5个容器实例。让我们调查。
在我们的应用程序中获得一个服务的服务ID:
docker service ls
您将看到web服务的输出,并以您的应用程序名称为前提。如果您将其命名为与本例中显示的相同,则名称将为getstartedlab_web。服务ID也被列出,以及复制的数量、图像名称和暴露的端口。
在服务中运行的单个容器称为任务。任务被赋予独特的id,replicas递增,知道达到您在docker-compose.yml中定义的副本数量。列出服务的任务:
docker service ps getstartedlab_web
如果您将系统上所有的容器列表列出,但这些任务也不会被服务过滤:
docker container ls -q
您可以多次运行curl -4 http://localhost,或者在浏览器中访问该URL并点击刷新几次。
无论如何,您将看到容器ID的更改,显示负载平衡;在每个请求中,选择一个循环模式的5个任务中的一个来响应。容器id将与前面的命令(docker container ls -q)匹配。
扩大app的规模您可以通过在docker-compose.yml中更改replicas来扩展应用程序,保存更改,并重新运行docker stack deploy命令:
docker stack deploy -c docker-compose.yml getstartedlab
Docker将做一个就地更新,不需要先拆下堆栈,也不需要杀死任何容器。
现在,重新运行docker container ls -q,以查看已部署的实例重新配置。如果您将副本按比例放大,就会有更多的任务,因此会有更多的容器。
拿下应用程序,用docker stack rm
docker stack rm getstartedlab
拿下swarm
docker swarm leave --force
这就像站起来,和Docker一起扩展你的应用一样简单。您已经向学习如何在生产中运行容器迈出了一大步。接下来,您将学习如何在Docker机器集群上运行这个应用程序。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27141.html
摘要:上文书,创建对象需要先创建对象。创建对象的杂活是嵌入在中的。对象使用来管理依赖关系非常好,但不是必须的。很容易实现,但手工维护各种乱七八糟的对象还是很麻烦。所有文章均已收录至项目。 本文翻译自 Symfony 作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Depend...
摘要:依赖注入并不限于构造函数作为经验,注入最适合必须的依赖关系,比如示例中的情况注入最适合可选依赖关系,比如缓存一个对象实例。 本文翻译自 Symfony 作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Dependency Injection Container in P...
阅读 3304·2023-04-26 00:07
阅读 3877·2021-11-23 10:08
阅读 2922·2021-11-22 09:34
阅读 821·2021-09-22 15:27
阅读 1724·2019-08-30 15:54
阅读 3701·2019-08-30 14:07
阅读 895·2019-08-30 11:12
阅读 648·2019-08-29 18:44