概述:扩展应用、实现负载均衡。
(一)什么是服务:
在一个分布式应用中,应用的不同部分称为服务(Service)。例如,一个视屏分享网站可能有:储存用户数据到数据库的服务、在用户上传视频之后转码的服务、前端服务等等。
“服务”仅仅是生产中的容器。一个服务运行一个镜像,但是它决定了镜像的运行方式:运行在什么端口,运行多少个容器的复制等等。通过改变软件中容器实例的数量去扩展服务,可以在运行中为服务分配更多的资源。
(二)docker-compose.yml
定义了Docker容器在生产中的运行方式。
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:
(三)启动负载均衡应用
docker swarm init
docker stack deploy -c docker-compose.yml getstartedlab
“getStartedlab”是我们App的名称,我们的单服务stack启动了主机上镜像的五个容器。我们可以获得服务的ID
docker service ls
通过web服务的输出我们可以发现,他的名字由“应用名称_服务名称”构成。运行在服务中的一个容器称为task,task有自己独有的递增ID,取决于你在docker-compose.yml中定义的复制个数。我们可以这样来查看task:
docker service ps getstartedlab_web
通过列举容器,也能过查看到task,不过没有被服务过滤过
docker container ls -q
(四)扩展应用
可以通过改变docker-compose.yml中replicas的值来扩展应用,重新部署:
docker stack deploy -c docker-compose.yml getstartedlab
Docker采用热更新的方式,没必要关闭stack或者关闭任何容器
拆卸应用 & 群
拆卸应用:
docker stack rm getstartedlab
拆卸群:
docker swarm leave --force
(五)速查表
docker stack ls # List stacks or apps
docker stack deploy -c <composefile> <appname> # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps <service> # List tasks associated with an app
docker inspect <task or container> # Inspect task or container
docker container ls -q # List container IDs
docker stack rm <appname> # Tear down an application
docker swarm leave --force # Take down a single node swarm from the manager