docker入門4-docker stack


stack介紹

stack是一組共享依賴,可以被編排並具備擴展能力的關聯service。舉例來說就是在swarm那章描述docker層次架構時,說stack就是一個完整的服務--它可以由基於flask框架的web service和redis數據庫service構成。

這個stack中的service的web部分由多個container組成,它們共享依賴

這個stack還可以加入其它service--比如nginx,所以stack具備被編排的能力。

當需要更大的處理需求時,在數據庫能承受的情況下,可以擴展swarm的機器數量,重新部署這個stack就能獲得更大的處理能力,stack就具備擴展能力

給stack添加新service

整個stack只有一個名為web的service,現在添加docker可視化監控軟件和redis數據庫。

docker-compose.yml

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。

配置項解析

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下運行。

注意這里的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。數據庫的確應該在配置好外部文件映射后才啟動。

重新部署stack

docker stack deploy -c docker-compose.yml getstartedlab重新執行一遍。

系列導航

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM