一、概念解释
堆,是一组分享依赖、能够被协调和扩张的相互关联的 服务。在docker之服务、docker之swarm中我们就使用到堆了,只不过我们的堆都是运行在单个主机上的单个堆。然而,更经常见的是多个堆运行在不同主机上。
二、添加一个新的服务并重新部署
- 修改docker-compose.yml文件
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "80: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
networks:
webnet:
- 确保shell是和myvm1关联的,在不同平台使用不同的命令,如:
linux平台
docker-machine env myvm1
windows平台
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression
- 重新部署我们的 堆,
docker stack deploy
docker stack deploy -c docker-compose.yml getstartedlab
- 访问。在docker-compose.yml中我们配置 visualizer 的端口为8080。所以,访问http://172.29.214.49:8080/
三、存留数据
- 修改
docker-compose.yml
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "80: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
- "/home/docker/data:/data"
deploy:
placement:
constraints: [node.role == manager]
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
- 在
./data
在管理器上创建一个目录,也就是/home/docker/data
docker-machine ssh myvm1 "mkdir ./data"
- 确保shell 是于myvm1通讯的
eval $(docker-machine env myvm1)
- 再跑docker stack deploy一次。
docker stack deploy -c docker-compose.yml getstartedlab
- 访问一个节点的网页,例如
http://192.168.99.101/
,观察 访问计数 :
同时观察可视化工具