服务(Services)的使用
本篇讲解服务(Services)的使用,我们测量我们的应用和启用负载均衡。为了达到这个目的,我们
必须提升我的分布式应用的层级,即服务。
在看本篇文章前,一定要先把 Docker教程1 和 Docker教程2 看完
1. 介绍服务(Services)
在分布式应用里,不同片段的应用被称为”服务“。例如,想象一下,如果你想做一个视频分享网站,
当用户上传文件/视频时,它可能包含的有:一个服务在存储应用数据到数据库,一个服务在视频后台转码,
一个服务在前端,等等。
所以服务就是一个”生产中的容器“。一个服务器仅仅能运行一个镜像,但是它用编篡的方式让镜像运行,
端口应该是什么了?有多少容器的副本应该在运行?但是服务就有这个能力。
2. 创建docker-compose.yml文件
touch docker-compose.yml
这个文件是定义了Docker容器应该在生产环境中的行为。
文件内容为:
version: "3"
services:
web:
# 格式是 username/repo:tag
image: victor/first-repo:partion1
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 Registry的镜像,Docker教程2讲过了
- 运行5个镜像实例作为一个服务,被称作
web
,限制每个的实例的最多使用10%的CPU,一共是50MB- 如果一个实例失败了,立即重启容器
- 映射80端口从主机到web
- 通过负载均衡命令
web
容器分享80端口,被称作webnet
。从内部讲,容器他们自己发布web80端口是在一个短暂的端口- 定义
webnet
网络为默认设置,它是负载均衡的覆盖网络
3. 运行你的新的负载均衡应用
3.1 初始化swarm
$ docker swarm init
3.2 给应用取个名称
$ docker stack deploy -c docker-compose.yml getstartedlab
查看5个容器的列表
$ docker stack ps getstartedlab
此时你可以多次访问 http://localhost
,然后你会发现Container ID一直在变,
这就证明了负载均衡;每一个请求在5个副本之一被选中了,以轮流的方式响应。
如果 docker-compose.yml
文件内容有变化,你再执行那个 #3.2 发布命令
4. 卸载应用
docker stack rm getstartedlab
这虽然移除了应用,但是我们的一个swarm节点还在运行,通过 docker node ls
来显示
;这时我们也把swarm移除吧
docker swarm leave --force
以下总结以下,本篇所有涉及的命令吧
docker stack ls # 在当前的Docker主机中,显示所有在运行的应用
docker stack deploy -c <composefile> <appname> # 运行指定的配置.yml文件
docker stack services <appname> # 显示该应用的所有相关服务
docker stack ps <appname> # 列出这个应用相关联的所有容器
docker stack rm <appname> # 卸载一个应用
docker node ls # 显示swarm节点
docker swarm leave --force # 强制退出swarm