前面我们部署的都是单个服务,现实需求中,应用可能很复杂,需要拆分成多个相互关联的服务,这时候我们就需要一次性部署多个服务。 堆栈是一组相互关联的服务,它们共享依赖,可以协同排列和缩放。
示例:
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就能看到各个节点任务的运行情况,如下图所示
