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

相關文章
相關標籤/搜索