标签:应用服务 示例 err 选择 循环 contain 调用 系统 star
docker集群部署:第3部分:服务#cat docker-compose.yml
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:
说明:我在vmware虚拟机测试时,使用的是如下脚本:
version: "3"
services:
web:
image: friendlyhello:latest
deploy:
replicas: 5
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
这个docker-compose.yml文件告诉Docker执行以下操作:
(1)从注册表中取出我们在第2部分:容器中上传的镜像。
(2)运行该镜像的5个实例作为一个服务调用web,限制每个使用,最多10%的CPU(跨所有核心)和50MB的RAM。(我未使用)
(3)如果一个失败,立即重新启动容器。
(4)指示Web容器通过称为webnet的负载均衡网络共享端口80。 (在内部,容器本身将在临时端口上发布到网站的端口80)。
(5)定义webnet网络使用默认设置(这是一个负载均衡覆盖网络)。
在我们使用docker stack deploy命令之前,我们先运行:
#docker swarm init
注意:我们将在第4部分中介绍该命令的含义。如果不运行docker swarm init,则会显示“此节点不是swarm manager”的错误。
现在让我们来运行它。你必须给你的应用程序起个名称。在这里,它被命名为getstartedlab。
#docker stack deploy -c docker-compose.yml getstartedlab
我们的单个服务堆栈在一台主机上运行了5个部署映像的容器实例。让我们来查看下。
在我们的应用程序中获取一项服务的服务ID:
#docker service ls (或docker ps)
将看到Web服务的输出,并以你的应用程序名称作为前缀。如果你将其命名为与此示例中所示的相同,则名称将为getstartedlab_web。还列出了服务ID以及实例数量,镜像名称和暴露端口。
在服务中运行的单个容器称为任务。任务会被赋予唯一的数字增加的ID,可以在docker-compose.yml中定义的实例数量。列出你的服务的任务:
#docker service ps getstartedlab_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pyjg9hjmiubl getstartedlab_web.1 friendlyhello:latest swarm1 Running Running 2 hours ago
l4dze4ykna53 getstartedlab_web.2 friendlyhello:latest swarm1 Running Running 2 hours ago
wv49dwr41uyt getstartedlab_web.3 friendlyhello:latest swarm1 Running Running 2 hours ago
eten7ue4sace getstartedlab_web.4 friendlyhello:latest swarm1 Running Running 2 hours ago
djtvjvv0012q getstartedlab_web.5 friendlyhello:latest swarm1 Running Running 2 hours ago
如果你只列出系统上的所有容器,也会显示任务,但不会被服务过滤:
#``docker container ls -q
552750f13021
f0709bdbbca2
913c2ead1b86
9b3874094b67
c51e8021f0ee
feddb2fff6c5
你可以连续多次运行curl -4 http:// localhost,或者在浏览器中转到该URL并点击几次刷新。
无论哪种方式,你将看到容器ID更改,演示负载均衡;在每个请求中,以循环方式选择5个任务中的一个来响应。容器ID将匹配您以前的命令(docker container ls -q)的输出。
如将 replicas(实例): 5 更改为3
#docker stack deploy -c docker-compose.yml getstartedlab
Updating service getstartedlab_web (id: f4pqg1x8eznhxu6bb897t6l3v)``
Docker会立即更新,不需要拆除原有集群或杀死任何容器。
现在,重新运行docker container ls -q来查看重新配置的已部署实例。
#docker container ls -q
abc6e8347046
99e75109a749
03ddf96a5934
#docker stack rm getstartedlab ##stack 堆
Removing service getstartedlab_web
Removing network getstartedlab_default
Removing network getstartedlab_webnet
#docker swarm leave --force
标签:应用服务 示例 err 选择 循环 contain 调用 系统 star
原文地址:http://blog.51cto.com/wutengfei/2063998