介绍
在第3部分中,我们扩展了应用程序并启用了负载平衡。为此,我们必须在分布式应用程序的层次结构中进行一级升级: 服务。
- 堆
- 服务(你在这里)
- 集装箱(第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/repository: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中上传的图像。
-
运行该映像的五个实例作为调用的服务
web
,限制每个实例使用,最多使用10%的CPU(跨所有内核)和50MB RAM。 -
如果发生故障,立即重新启动容器。
-
将端口80映射到主机
web
端口80。 -
指示
web
容器通过称为负载平衡网络共享端口80webnet
。(在内部,集装箱本身将web
在短暂的港口发布到 80号港口。) -
webnet
使用默认设置(这是一个负载平衡的重叠网络)来定义网络。
想知道撰写文件的版本,名称和命令?
请注意,将撰写文件设置为version: "3"
。这基本上使它与 群模式兼容。我们可以利用部署密钥(仅适用于Compose文件格式3.x及更高版本)及其子选项来对每个服务(例如web
)进行负载平衡和优化性能。我们可以使用docker stack deploy
命令运行文件(也仅在Compose文件3.x及以上支持)。您可以使用非群组配置docker-compose up
运行版本3文件,但是由于我们正在构建一个群体示例,因此我们专注于堆栈部署。
您可以将Compose文件命名为任何您希望使其在逻辑上对您有意义的任何内容;docker-compose.yml
只是一个标准名称。我们可以很容易地将这个文件docker-stack.yml
或更具体的项目称为我们的项目。
运行新的负载平衡应用程序
在我们可以使用docker stack deploy
命令之前,我们先运行:
docker swarm init
注意:第4部分将介绍该命令的含义。如果你不运行,
docker swarm init
你会收到一个错误,“这个节点不是群组管理器”。
现在我们来运行它 你必须给你的应用程序一个名字。在这里,它设置为 getstartedlab
:
docker stack deploy -c docker-compose.yml getstartedlab
看到刚刚推出的五个容器的列表:
docker stack ps getstartedlab
您可以curl http://localhost
连续运行多次,或者在浏览器中转到该URL,并点击刷新几次。无论哪种方式,您将看到容器ID更改,显示负载平衡; 在每个请求中,以循环方式选择五个副本之一进行响应。
注意:在此阶段,容器可能需要长达30秒才能响应HTTP请求。这并不代表Docker或群组性能,而是一个未满足的Redis依赖关系,我们将在本教程的后面介绍。
缩放应用程序
您可以通过更改replicas
值docker-compose.yml
,保存更改并重新运行docker stack deploy
命令来缩放应用程序:
docker stack deploy -c docker-compose.yml getstartedlab
Docker将进行就地更新,无需首先撕下堆叠或者杀死任何容器。
现在,重新运行docker stack ps
命令以重新配置已部署的实例。例如,如果您放大副本,则会有更多的运行容器。
取下应用程序和群组
将应用程序放在下面docker stack rm
:
docker stack rm getstartedlab
这会删除应用程序,但是我们的单节点群组仍然运行(如图所示docker node ls
)。拿下群众docker swarm leave --force
。
与Docker一样容易站起来扩展您的应用程序。您在学习如何运行生产中的集装箱方面迈出了巨大的一步。接下来,您将了解如何在Docker机器群集上运行此应用程序作为bonafide群集。
注意:撰写这样的文件可用于使用Docker定义应用程序,并可以使用Docker Cloud上传到云提供商,也可以使用Docker Enterprise Edition选择的任何硬件或云提供商 。