03. 入门 服务
在分布式应用程序中,应用程序的不同部分称为“服务”service
。
服务实际上是生产环境中的容器。
服务可以扩展应用程序app
并启用负载平衡。
1. 前提⚓
linux需要安装docker-compose
:
curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2. 编写文件⚓
定义服务需要编写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:
- "4000:80"
networks:
- webnet
networks:
webnet:
3. 运行app⚓
发布一个stack
。
docker swarm init
# getstartedlab 是你的app名字,也是stack名字,随意取名
docker stack deploy -c docker-compose.yml getstartedlab
服务的名字以"stack_name" + "_" + "compose文件中服务名"
为名。
# 列出所有的服务
docker service ls
# 列出指定的服务
docker stack services getstartedlab
在服务中运行的一个容器叫做一个任务task
,数量是在yml文件中的replicas
字段定义的。对于每个请求,以循环方式选择这些任务中的一个来响应。
# 查看一个服务中的任务
docker service ps getstartedlab_web
# 查看一个stack中的任务
docker stack ps getstartedlab
# 查看所有的任务,列出的是container_id,与task_id不同
docker container ls
4. 扩展app⚓
直接修改docker-compose.yml
文件,然后重新运行docker stack deploy app_name
(app_name要相同)命令即可实现扩展。docker执行替换式更新,无需关闭任何stack或container。
bug:改变映射端口之后不会负载均衡了,一直都是一个任务在提供服务。
5. 关闭app和swarm⚓
docker stack rm getstartedlab
docker swarm leave --force
6. 常用命令⚓
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_id or container_id> # 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