docker練習-堆棧

介紹

分佈式應用程序層次結構的頂部:堆棧。node

堆棧是一組相互關聯的服務,它們共享依賴關係,而且能夠協調和縮放在一塊兒。web

單個堆棧可以定義和協調整個應用程序的功能(儘管很是複雜的應用程序可能但願使用多個堆棧)。redis

添加新服務並從新部署

讓咱們看看咱們的swarm如何調度容器。docker

  1. 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以列出計算機並確保已鏈接到myvm1app

     
        

    3. docker stack deploy在管理器上從新運行該命令,並更新須要更新的任何服務:ssh

     docker stack deploy -c docker-compose1.yml getstartedlab
     
        

    4. 看一下可視化工具。編輯器

     
        

    在Compose文件中看到了visualizer在端口8080上運行docker-machine ls分佈式

    經過運行獲取其中一個節點的IP地址轉到端口8080的IP地址

    可視化工具是一個獨立的服務,能夠在任何包含它的應用程序中運行。

    它不依賴於任何其餘東西。

     
        

    堅持數據

    再次經過相同的工做流程來添加Redis數據庫來存儲應用數據。

    1. 保存這個新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在容器的文件系統中,若是從新部署該容器,將會被刪除。

      這個真相來源有兩個組成部分:

      • 您放置在Redis服務上的放置約束,確保它始終使用相同的主機。
      • 您建立的容器容許容器訪問./data(在主機上)/data(在Redis容器內)。
      • 當容器來來每每時,存儲在./data指定主機上的文件仍然存在,從而實現連續性。

      已準備好部署新的Redis-using堆棧。

    2. ./data在管理器上建立一個目錄:

      docker-machine ssh myvm1 "mkdir ./data" 
    3. 確保您的shell配置爲與之通訊myvm1

      • 運行docker-machine ls以列出計算機並確保已鏈接到myvm1

    4. 再跑docker stack deploy一次。

      $ docker stack deploy -c docker-compose.yml getstartedlab 
    5. 運行docker service ls以驗證三個服務是否按預期運行。

    6. 檢查一個節點上的網頁,例如http://192.168.99.101,並查看訪問者計數器的結果,該計數器現已存在並在Redis上存儲信息。
    7. 同時,檢查在上的任一節點的IP地址,端口8080的可視化工具,並注意看redis與一塊兒運行服務webvisualizer服務。
相關文章
相關標籤/搜索