Docker 入门 – Stack
前面我们部署的都是单个服务,现实需求中,应用可能很复杂,需要拆分成多个相互关联的服务,这时候我们就需要一次性部署多个服务。
堆栈是一组相互关联的服务,它们共享依赖,可以协同排列和缩放。
示例:
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: yangguangqishimi/testdemo:1.0.1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis
ports:
- "6379:6379"
volumes:
- "/home/docker/data:/data"
deploy:
placement:
constraints: [node.role == manager]
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
说明:
* 1、总共三个服务,web、redis和visualizer,visualizer是一个docker服务可视化工具;
* 2、placement 表示在指定位置(node节点)运行,此处visualizer就被指定在manager节点运行;
* 3、volume 表示visualizer可以访问Docker的host socket文件。
* 4、redis容器中,/data目录映射到主机目录./data中,也就是/home/docker/data,这样当redis容器删除后,数据依然存在,下次再启动redis容器时,还可以读取到之前存储的数据。
创建主机data目录,当前目录为/home/docker
$ docker-machine ssh myvm1 "mkdir ./data"
启动该堆栈,跟前面的命令一样
$ docker stack deploy -c docker-compose.yml hellolfg
启动成功后,访问192.168.99.100:8080就能看到各个节点任务的运行情况,如下图所示