一、学习之前的要求
要求参考这里链接,重要的是要把docker compose装起来。官网安装教程,注意选择适合你操作系统的还有docker-compose的最新版本。
二、介绍
在这部分,我们要扩展我们的应用并使其能够负载均衡。
三、关于服务
在一个分布式系统中,一个应用的不同部分称为服务。比如一个视频分享站点,他可能包含存储数据到数据库、视频转码、前端服务等。
服务其实就是产品中的容器(Services are really just “containers in production.”)。一个服务只运行一个镜像,但它编码了映像的运行方式。在Docker平台上,定义、运行和扩展服务非常容易 - 只需编写一个docker-compose.yml就行。
所以,docker-compose.yml 就是用来定义、运行、扩展服务的。
四、第一个docker-compose.yml文件
docker-compose.yml可以放在任何地方。
version: "3"
services:
web:
# 将username/repo:tag 替换为你的用户名和标签,比如我的为fenglifengli/get-started:part2
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:
这个文档的具体意思参考 链接
五、运行我们的负载均衡app
- 在部署app之前,先执行下面命令(不然会出错哦!):
docker swarm init
- 部署我们的app并给它命名:
docker stack deploy -c docker-compose.yml getstartedlab
这样一个主机上就运行了一个镜像(image)的五个实例(contianer)
- 显示我们的服务:
docker service ls
- 在服务中运行的单个容器,我们称为任务(task),下面命令列出我们服务的任务:
docker service ps getstartedlab_web
- 如果此时列出所有容器
docker container ls -q
- 现在我们就可以访问我们的服务了通过
curl -4 http://localhost:4000
或访问
http://localhost:80(注意这个访问会很满,建议用上面命令方式)
结果容器ID都会发生变化,从而证明负载均衡; 对于每个请求,以循环方式选择5个任务中的一个来响应。容器ID与上一个命令(docker container ls -q )的输出匹配。
六、扩展我们的应用
-
我们可以修改docker-compose.yml的replicas来扩展我们的服务,也就是增加容器数量。然后重新部署我们的应用。
-
卸载应用方式
docker stack rm getstartedlab
- 取消swarm
docker swarm leave --force