分佈式應用程序層次結構的頂部:堆棧。node
堆棧是一組相互關聯的服務,它們共享依賴關係,而且能夠協調和縮放在一塊兒。web
單個堆棧可以定義和協調整個應用程序的功能(儘管很是複雜的應用程序可能但願使用多個堆棧)。redis
讓咱們看看咱們的swarm如何調度容器。docker
docker-compose1.yml
在編輯器中打開並使用如下內容替換其內容
shell
version: "3" services: web: # replace username/repo:tag with your name and image details image: wangshu19930818/friendlyhello:v1 deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80: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 networks: webnet:
這裏惟一新的是對等服務web
,名爲visualizer
。
注意這裏有兩個新的東西:一個volumes
鍵,讓可視化工具訪問Docker的主機套接字文件,以及一個placement
密鑰,
確保這個服務只能在一個swarm管理器上運行 - 毫不是一個工做者。
webvisualizervolumesplacement
2. 確保您的shell配置爲與之通訊myvm1
數據庫
運行
docker-machine ls
以列出計算機並確保已鏈接到myvm1
app
3. docker stack deploy
在管理器上從新運行該命令,並更新須要更新的任何服務:ssh
docker stack deploy -c docker-compose1.yml getstartedlab
4. 看一下可視化工具。編輯器
在Compose文件中看到了visualizer
在端口8080上運行docker-machine ls
。分佈式
經過運行獲取其中一個節點的IP地址。轉到端口8080的IP地址
可視化工具是一個獨立的服務,能夠在任何包含它的應用程序中運行。
它不依賴於任何其餘東西。
再次經過相同的工做流程來添加Redis數據庫來存儲應用數據。
保存這個新docker-compose.yml
文件,最後添加一個Redis服務。請務必更換username/repo:tag
圖像詳細信息。
version: "3" services: web: # replace username/repo:tag with your name and image details image: wangshu19930818/friendlyhello:v1 deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80: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:
Redis端口6379已由Redis預先配置爲從容器暴露給主機,在咱們的Compose文件中,咱們將它從主機暴露給全世界,所以實際上能夠輸入任何IP的IP若是您願意,能夠將節點導入Redis Desktop Manager並管理此Redis實例。
最重要的是redis
規範中有一些事項會使數據在此堆棧的部署之間保持不變:
redis
老是在管理器上運行,因此它老是使用相同的文件系統。redis
訪問主機文件系統中的任意目錄做爲/data
容器內部,這是Redis存儲數據的位置。總之,這是在主機的物理文件系統中爲Redis數據建立「真實來源」。若是沒有這個,Redis會將其數據存儲 /data
在容器的文件系統中,若是從新部署該容器,將會被刪除。
這個真相來源有兩個組成部分:
./data
(在主機上)/data
(在Redis容器內)。./data
指定主機上的文件仍然存在,從而實現連續性。已準備好部署新的Redis-using堆棧。
./data
在管理器上建立一個目錄:
docker-machine ssh myvm1 "mkdir ./data"
確保您的shell配置爲與之通訊myvm1
運行docker-machine ls
以列出計算機並確保已鏈接到myvm1
再跑docker stack deploy
一次。
$ docker stack deploy -c docker-compose.yml getstartedlab
運行docker service ls
以驗證三個服務是否按預期運行。
http://192.168.99.101
,並查看訪問者計數器的結果,該計數器現已存在並在Redis上存儲信息。redis
與一塊兒運行服務web
和visualizer
服務。