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只有一個名爲web的service,如今添加docker可視化監控軟件和redis數據庫。web
docker-compose.yml
redis
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
docker stack deploy -c docker-compose.yml getstartedlab
從新執行一遍。
docker入門1-docker container docker入門2-docker service docker入門3-docker swarm