docker入门4-docker stack

stack介绍

stack是一组共享依赖,能够被编排并具有扩展能力的关联service。举例来讲就是在swarm那章描述docker层次架构时,说stack就是一个完整的服务--它能够由基于flask框架的web service和redis数据库service构成。html

这个stack中的service的web部分由多个container组成,它们共享依赖node

这个stack还能够加入其它service--好比nginx,因此stack具有被编排的能力。python

当须要更大的处理需求时,在数据库能承受的状况下,能够扩展swarm的机器数量,从新部署这个stack就能得到更大的处理能力,stack就具有扩展能力nginx

给stack添加新service

整个stack只有一个名为web的service,如今添加docker可视化监控软件和redis数据库。web

docker-compose.ymlredis

version: "3"
services:
  web:
    image: cchenyang/get-started:part2
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        # immediately restart containers if one fails
        condition: on-failure
    # map port 8001 on the host to web's port 8001
    ports:
      - "8001:8001"
    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:

这里新添加了两个service--visualizer和redis。docker

配置项解析

volumes是将docker外界的文件映射到docker中。"/var/run/docker.sock:/var/run/docker.sock"就是将机器自身的docker.sock文件映射放到visualizer整个service的container的指定目录下。docker container只能经过这种映射的方式读写container外的文件。redis这个service中的volumes也是同理,这个redis配置的持久化文件保存目录是/data,经过映射,将/data文件映射到外部机器的/home/docker/data文件夹下,实现持久化存储。数据库

placement下的constraints限制visualizer和redis只能在manager下运行。npm

注意这里的command,web和visualizer这两个服务,开启container就会运行。经过docker container ls就能够发现,web的container的command是python app.py,visulizer的command是npm start,惟独redis不是什么启动命令,而是执行的sh文件。经过https://docs.docker.com/samples/找到它的构建命令,发现只是在作设置,冰没有启动redis。因此在部署的时候,须要再添加启动的command。数据库的确应该在配置好外部文件映射后才启动。flask

从新部署stack

docker stack deploy -c docker-compose.yml getstartedlab从新执行一遍。

系列导航

docker入门1-docker container
docker入门2-docker service
docker入门3-docker swarm

相关文章
相关标签/搜索