在实际应用中,我们需要水平扩展我们的应用使之能够达到负载均衡的目的。docker可以使用service(服务)轻易地水平扩展一个分布式应用.
在一个分布式应用当中,不同的app被称为是services。
服务就是产品容器。一个服务运行着一个镜像,但是它将镜像的运行编辑成一个字典,eg:使用什么端口号,多少副本等等。通过伸缩一个服务来改变容器实例的数量,指定更多的计算资源用于这项服务上。
通过docker-compose.yml来定义、运行和伸缩服务
eg:
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:
作用:
1. 从注册域名下拉去上传的镜像
2. 运行镜像五个实例来作为一个服务(被称为web),限制每一个cpu使用率为最多10%,50MB内存
3. 当一个容器出错时立即重启
4. 映射端口4000到主机的80
5. 指示web的容器通过 网络负载均衡来共同分享一个80端口(称为webnet),
6. Define the webnet network with the default settings (which is a load-balanced overlay network).
运行负载均衡APP
首先执行下条命令(下一节深入解释)
docker swarm init
如果不执行上面这句,可能会出现如下情况:
If you don’t run docker swarm init you get an error that “this node is not a swarm manager.”
运行
docker stack deploy-cdocker-compose.yml getstartedlab
查看服务id
docker service ls
一个容器运行一个着一个服务,叫做任务。任务有独一无二的 id。
docker service ps getstartedlab_web
显示id仅数字增长的容器
docker containerls -q
伸缩应用
可以通过更改配置 replicas 的值对应用进行伸缩。保存更改后,重新运行
docker stack deploy -c docker-compose.yml getstartedlab
更新时,docker 不需要关闭任何一个容器。
关闭app
docker stack rm getstartedlab
关闭群(swarm)
docker swarm leave --force
总结一下:
docker run 足够简单,但是产品容器是作为服务来实现的。在compose file文件中,服务编码成一个行为。这个文件可以用来伸缩、限制和重新部署你的应用。服务改变时,使用相同的命令 dockerc stack deploy .
掌握下列命令:
docker stack ls # List stacks or apps
docker stack deploy -c
docker service ls # List running services associated with an app
docker service ps
docker inspect
docker container ls -q # List container IDs
docker stack rm
docker swarm leave --force # Take down a single node swarm from the manager