服务
在第3部分中,我们扩展了我们的应用并实现了负载平衡。要做到这一点,我们必须在分布式应用程序的层次结构中升级一级: 服务。
- 堆
- 服务(你在这里)
- 容器
一、服务的概念
在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果您想象一个视频共享站点,它可能包含一个用于将应用程序数据存储在数据库中的服务,一个用于在后台进行视频转码的服务用户上传的东西,前端的服务等等。
服务实际上只是“生产中的容器”。服务只运行一个映像,但它编码图像运行的方式 - 应该使用哪个端口,容器应运行多少个副本,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
幸运的是,使用Docker平台定义,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml文件即可。
二、编写docker-compose.yml文件
1.一个docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。
将该文件保存为docker-compose.yml您想要的任何位置。确保您已将 第2部分中创建的图像推送到注册表中,并通过替换 图像详细信息来更新此图像。.ymlusername/repo:tag
2.看一下我的cloud.docker
3.编辑一下
里面的值:
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:
4.该docker-compose.yml文件告诉Docker执行以下操作:
从注册表中拉出我们在步骤2中上传的图像。
运行该图像的5个实例作为所调用的服务web,限制每个实例使用最多10%的CPU(跨所有核心)和50MB的RAM。
如果一个失败,立即重启容器。
将主机上的端口80映射到web端口80。
web通过称为负载平衡的网络指示容器共享端口80 webnet。(在内部,容器本身web在临时端口上发布到 80端口。)
webnet使用默认设置定义网络(这是一个负载平衡覆盖网络)。
三、运行新的负载平衡应用程序
1. 在我们可以使用该docker stack deploy命令之前,我们首先运行:
docker swarm init
注意:我们在第4部分讨论了该命令的含义。如果你没有运行,docker swarm init你会得到一个错误,“这个节点不是一个群管理器。”
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker swarm init
Swarm initialized: current node (bspodnzw81zmppa5o03tr2w9i) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4khckewslx6z2kq4qvtrz88dpp8dl6fn3fijieql8a8x4v99ko-es4rbyj8jrfn64c1rhxj5wki9 172.16.158.128: