同一個Docker swarm集群中部署多版本的測試環境


先介紹下用到的技術

Docker swarm: Docker官方的集群管理工具,相比kubernetes更加簡單,容易入門。https://docs.docker.com/engine/swarm/

Traefik: 一個現代化的反向代理工具,原生支持Docker swarm模式,可以實現swarm的動態代理。https://docs.traefik.io/user-guide/swarm-mode/

 
下圖展示主要的思路:
在Docker swarm中創建某個測試版本service時,通過設置service的Label來指定該版本監聽的域名如master分支下設置Host:master.quanqiuzhu.com vNext分支下設置Host:vnext.quanqiuzhu.com
Traefik通過監聽swarm中docker container(service)的創建、關閉事件,並根據container(service)中label的設定來動態實現代理。

 

 
實戰:
1. 准備docker swarm測試環境
     docker swarm init     初始化一個swarm集群, 並把當前主機設置為swarm manager。如果想讓其它機器加入該集群,可以執行以下命令
     docker swarm join-toker worker     可以輸出加入該集群並作為worker角色的命令,如下:
     

 

     可以在另外一個安裝了docker的物理機(或虛擬機)上執行以上命令,就會加入該集群。
     在該示例中,不要求必須是兩台或以上的機器組成的集群,只有一台manager機器也可以。
2. 創建一個docker swarm network, traefik反向代理和我們web服務都要用這個network
    docker network create --driver=overlay test-traefik     network的名字是test-traefik
3. 創建trafik反向代理service
    在swarm的manager機器上執行以下命令
     docker service create \
    --name traefik \
    --constraint=node.role==manager \
    --publish 80:80 --publish 8080:8080 \
    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
    --network test-traefik \
    traefik \
    --docker \
    --docker.swarmmode \
    --docker.domain=traefik \
    --docker.watch \
    --web
     啟動后,可以通過http://{manager-ip}:8080/來訪問trafik的web監控界面,可以動態看到反向代理的配置
4. 在swarm中創建我們自己的應用程序service, 運行不同分支(master/vnext)打包鏡像的應用程序,實現在同一套swarm集群中部署不同分支的測試環境。
     下面演示運行master和vnext分支的應用程序。
     我這里有一個web和grpcservice程序, web 程序需要調用grpcservice。所以有兩個image web和grpcservice
     下面基於docker-compose文件來部署我們的web和service的image,如下分別是master分支和vnext分支對應的部署compose文件,通過label指定監聽的域名。
     下圖示例用了相同的image,實際上應該是master使用master分支對應的image, vnext使用vnext分支的image
         
  1. 修改本機host文件,把www.vnext.quanqiuzhu.com和www.master.quanqiuzhu.com的域名指向manager對應的機器ip
         如果上一步使用的image不同的話,就可以看到不同分支對應的效果了

 

    


免責聲明!

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



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