先决条件
- 安装Docker 1.13或更高版本。
- 阅读第1部分的方向。
- 了解如何在第2部分中创建容器。
- 确保已按照指示将您创建的容器推送到注册表; 我们将在这里使用它。
- 通过运行此操作并访问
http:// localhost /(在您的信息中插入用户名,repo和标签)
确保您的图像正常工作:
docker run -p 80:80 username/repo:tag
介绍
在第3部分中,我们扩展了应用程序并启用了负载平衡。 为此,我们必须在分布式应用程序的层次结构中进行一级升级:Services
。
了解Services
在分布式应用程序中,应用程序的不同部分称为“服务”。例如,如果您想像一个视频共享站点,则可能存在将应用程序数据存储在数据库中的服务,后台视频转码服务 用户上传东西,前端服务等等。
一个服务真的只是意味着“容器在生产中”。一个服务只运行一个映像,但它编码了映像运行的方式 - 应该使用哪些端口,容器应该运行多少副本,以便服务具有所需的容量 , 等等。 扩展服务会更改运行该软件的容器实例的数量,并为该过程中的服务分配更多的计算资源。
幸运的是,使用Docker平台定义,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml
文件。
你的第一个docker-compose.yml
文件
docker-compose.yml
文件是一个YAML
文件,用于定义Docker容器在生产过程中的行为。
docker-compose.yml
将此文件另存为docker-compose.yml,无论什么地方。 确保您将您在第2部分中创建的映像推送到注册表,并使用该信息替换username/repo:tag
:
version: "3"
services:
web:
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中上传的图像的五个实例作为称为Web的服务,限制每个实例使用至多10%的CPU(跨所有内核)和50MB RAM。
- 如果发生故障,立即重新启动容器。
- 将主机上的端口80映射到网络端口80。
- 指示web容器通过称为webnet的负载平衡网络来共享端口80。 (在内部,容器本身将在短暂的港口发布到Web的80端口。)
- 使用默认设置(这是一个负载平衡的覆盖网络)来定义网络网络。
运行新的负载平衡应用程序
在我们可以使用docker stack deploy
命令之前,我们先运行:
docker swarm init
注意:我们将在第4部分中介绍该命令的含义。如果不运行
docker swarm ini
t,您将收到一个错误,表示“该节点不是群组管理器”。
现在我们来运行它 你必须给你的应用程序一个名字 - 这里设置为getstartedlab:
docker stack deploy -c docker-compose.yml getstartedlab
看到刚刚推出的五个容器的列表:
docker stack ps getstartedlab
您可以连续多次运行curl http:// localhost
,或者在浏览器中转到该URL,并点击刷新几次。 无论哪种方式,您将看到容器ID随机更改,显示负载平衡; 随着每个请求,五个副本中的一个被随机选择来进行响应。
缩放应用程序
您可以通过更改docker-compose.yml
中的replicas
值来缩放应用程序,保存更改并重新运行docker stack deploy
命令:
docker stack deploy -c docker-compose.yml getstartedlab
Docker将进行就地更新,无需首先撕下堆叠或者杀死任何容器。
拿下应用程序
将该应用程序与docker stack rm
进行对应:
docker stack rm getstartedlab
与Docker一样容易站起来扩展您的应用程序。 您在学习如何运行生产中的集装箱方面迈出了巨大的一步。 接下来,您将学习如何在一组计算机上运行此应用程序。
注意:撰写这样的文件可用于使用Docker定义应用程序,并可以使用Docker Cloud上传到云提供商,也可以使用Docker Enterprise Edition选择的任何硬件或云提供商。
要简要说明,在输入docker运行时,简单的说,生产中的容器的真正实现是将其作为一项服务运行。 服务在Compose文件中编写容器的行为,并且此文件可用于扩展,限制和重新部署我们的应用程序。 可以使用与启动服务相同的命令来运行对服务的更改:docker stack deploy
。
在这个阶段要探索的一些命令:
docker stack ls #列出该Docker主机上的所有正在运行的应用程序
docker stack deploy -c <composefile> <appname> #运行指定的Compose文件
docker stack services <appname> #列出与应用程序关联的服务
docker stack ps <appname> #列出与应用程序关联的运行容器
docker stack rm <appname> #拆除应用程序