Windows上應用Docker容器技術的動态代碼測試

創提信息
2022/10/27

分享到

“轉載自維克多汽車技術(上海)有限公司,作者Vector China”


随著(zhe)軟件項目複雜度的提升和不可控的團隊資源變更,研發(fā)組織對(duì)DevOps部署的靈活性、可快速遷移和适配CI/CD的叠代提出了更高的要求。傳統的虛拟機方案,即模拟出一個完整操作系統,對(duì)這(zhè)類需求顯得力不從心;而輕巧和便捷的容器技術通過(guò)在宿主機操作系統上應用虛拟化,直接勝出。本文主要介紹容器技術的代表産品Docker,并對(duì)Docker與虛拟機進(jìn)行對(duì)比,以及如何在Windows上應用Docker開(kāi)展動态代碼測試和實現與Jenkins的持續集成(chéng)。


Docker簡介
 
Docker是一組PaaS(Platform as a Service,平台即服務)産品,通過(guò)操作系統層級的虛拟化提供稱爲容器的打包軟件服務。Docker起(qǐ)源自2008年在巴黎初創的dotCloud公司,後(hòu)于美國(guó)進(jìn)行孵化和注冊,于2013年3月宣布遵從Apache2.0協議開(kāi)源,同年9月正式更名爲Docker,次年在0.9版本上用Go語言編寫的libcontainer組件替代了LXC(Linux Container)。


Windows上應用Docker容器技術的動态代碼測試-1.png
圖1|Docker架構圖

 
如圖1(https://docs.docker.com/get-started/overview/)所示,Docker可以讓開(kāi)發(fā)者基于選定的鏡像(Image),打包目标應用以及依賴包到一個輕量級、可移植的容器(Container)中,并通過(guò)客戶端的docker命令實現對(duì)Docker主機内容器的操控;當前容器也可創建成(chéng)新的鏡像,而所有鏡像都(dōu)存放在倉庫(Registry)中,類似GitHub一樣(yàng)分爲共有倉庫和私有倉庫。


容器技術與虛拟機的比較
 
容器和虛拟機雖然都(dōu)使用虛拟化技術,但容器(圖2)并不是模拟一個完整的操作系統,而是在宿主機操作系統上應用虛拟化技術;勝在“輕巧”,可實現軟件應用的秒級啓動和響應。相比而言,虛拟機冗餘步驟多、啓動太慢、占用内存硬盤資源,過(guò)于笨重。
 
此外,容器彼此間互相隔離,可通過(guò)預定渠道(dào)進(jìn)行通信(即共享宿主機的操作系統)。基于鏡像可便捷地創建容器和分發(fā)構建環境,契合DevOps和敏捷開(kāi)發(fā)等對(duì)快速部署和應用的需求。
 

Windows上應用Docker容器技術的動态代碼測試-2.jpg

圖2|容器與虛拟機的比較


Windows上使用Docker運行VectorCAST
 
Windows上Docker安裝信息可參照:
https://docs.docker.com/desktop/windows/install/


3.1 運行帶GUI的Ubuntu鏡像,創建并啓動容器
 
鏡像使用參照https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/


Windows上應用Docker容器技術的動态代碼測試-3.png


參數解析
 
    1. docker,Docker的二進(jìn)制執行文件。
 
    2. run,與前面(miàn)的docker組合來運行一個容器。
 
    3. -p,指端口綁定。
 
    4. -v,設定共享目錄,爲了將(jiāng)安裝包保存到容器中,需要指定目錄。D:\Docker\Data指本地目錄,可以自定義;/dev/shm是指容器中的目錄。將(jiāng)需要複制到容器中的文件放置到D:\Docker\Data中,在容器中就(jiù)可以進(jìn)入/dev/shm來訪問這(zhè)些文件。
 
    5. –name,設定容器名稱,如不指定,則設置一個随機生成(chéng)的名字。
 
    6. :xenial,指定鏡像的版本,如不指定,則默認使用最新版本。
 
    7. dorowu/ubuntu-desktop-lxde-vnc:xenial,指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker就(jiù)會(huì)從鏡像倉庫Docker Hub下載公共鏡像。
 
上述命令完整的意思可以解釋爲:Docker以dorowu/ubuntu-desktop-lxde-vnc:xenial鏡像創建一個名爲ubuntu-desktop的容器,指定端口6080:80進(jìn)行通信,指定D:\Docker\Data以及/dev/shm爲Windows和Ubuntu的共享目錄。


3.2 在容器中安裝并使用VectorCAST
 
    a. 在浏覽器中打開(kāi)http://127.0.0.1:6080/,進(jìn)入Ubuntu的桌面(miàn)界面(miàn),打開(kāi)命令行。

Windows上應用Docker容器技術的動态代碼測試-4.jpg
圖3|打開(kāi)Ubuntu容器的命令行


    b. 進(jìn)入/dev/shm目錄找到在Windows的D:\Docker\Data下存放的VectorCAST安裝文件,并按Linux下的安裝方法常規安裝以及配置,在此不作贅述。


Windows上應用Docker容器技術的動态代碼測試-5 小.jpg
圖4|容器内安裝VectorCAST


    *若提示找不到命令時(shí)(鏡像未安裝),可執行apt update以及apt install命令進(jìn)行安裝即可。
 
    c. 運行VectorCAST,确認獲取到License。


Windows上應用Docker容器技術的動态代碼測試-6 小.jpg
圖5|打開(kāi)VectorCAST工具


    d. 創建環境并執行測試用例。


Windows上應用Docker容器技術的動态代碼測試-7 小.jpg
圖6|VectorCAST中創建環境并執行用例


3.3 基于已有容器創建私有鏡像
 
爲實現工具安裝的快速部署和避免依賴包可能(néng)導緻的不兼容問題,在安裝VectorCAST的容器基礎上創建私有鏡像提交至本地并打包,即可通過(guò)推送或分發(fā)達成(chéng)需求。
 
    a. docker images查看現有鏡像:


Windows上應用Docker容器技術的動态代碼測試-8 小.jpg
圖7|用docker images命令查看現有鏡像


    b. docker ps查看在運行中的容器:


Windows上應用Docker容器技術的動态代碼測試-9 小.jpg
圖8|用docker ps命令查看在運行中的容器


此容器已經(jīng)安裝了VectorCAST,在此基礎上創建鏡像。Commit命令需要使用這(zhè)裡(lǐ)的紅框内容器ID。
 
    c. docker commit創建鏡像,并用docker images查看已創建的鏡像myubuntu:2.0:
 
      • docker commit -m "create ubuntu with VectorCAST installed" -a "vector" e94998fcde2f myubuntu:2.0


Windows上應用Docker容器技術的動态代碼測試-10 小.jpg
圖9|用docker commit命令創建新的鏡像


    d. 基于創建的新鏡像創建容器并啓動:
 
      • docker run -p 6081:80 --name ubuntu_new myubuntu:2.0


Windows上應用Docker容器技術的動态代碼測試-11 小.jpg
圖10|基于創建的新鏡像創建容器并啓動


    e. 進(jìn)入Ubuntu桌面(miàn),确認容器中有已安裝好(hǎo)的VectorCAST


Windows上應用Docker容器技術的動态代碼測試-12 小.jpg
圖11|确認基于新鏡像的容器


    f. Docker save打包鏡像至tar文件,可以拷貝至其他宿主機使用:
 
      • docker save -o my_ubuntu_v2.tar 919c1693ccee


Windows上應用Docker容器技術的動态代碼測試-13 小.jpg
圖12|docker save命令打包鏡像


Jenkins + Docker實現CI/CD
 
Docker爲DevOps提供了很好(hǎo)的基礎支撐:
 
    • 輕量。可以快速啓動和部署一個複雜的開(kāi)發(fā)環境;
 
    • 通過(guò)編寫Dockerfile可以將(jiāng)業務容器化。將(jiāng)Dockerfile提交到代碼倉庫中,在持續集成(chéng)的過(guò)程中基于已有的Dockerfile來構建鏡像 ,極大提升持續集成(chéng)的構建速度;
 
    • 鏡像倉庫使分發(fā)變得十分簡單。當鏡像構建完成(chéng)後(hòu),無論在哪裡(lǐ)隻需要執行docker pull命令就(jiù)可以快速地將(jiāng)鏡像拉取到本地并且啓動應用。


Windows上應用Docker容器技術的動态代碼測試-14 小.jpg


圖13|基于Docker+Jenkins部署CI/CD


接下來介紹從Jenkins Pipeline中啓動Docker容器,運行VectorCAST測試環境并生成(chéng)測試報告的過(guò)程。


4.1 編寫測試腳本
 
在容器中編寫運行VectcorCAST測試工程的腳本start_vcast_cmd.sh,後(hòu)續會(huì)在Pipeline中調用此腳本:


Windows上應用Docker容器技術的動态代碼測試-15 小.jpg
圖14|在容器中編寫運行VectorCAST工程的腳本


4.2 宿主機上創建Jenkins Pipeline


Windows上應用Docker容器技術的動态代碼測試-16 小.jpg
圖15|創建Jenkins Pipeline


Windows上應用Docker容器技術的動态代碼測試-17 小.jpg
圖16|編寫Pipeline腳本


jenkins_run_docker.bat文件中主要執行開(kāi)啓容器以及運行容器中事(shì)先準備的腳本start_vcast_cmd.sh:


Windows上應用Docker容器技術的動态代碼測試-18 小.jpg
圖17|編寫Pipeline調用的批處理腳本


4.3 構建Pipeline并查看報告

Windows上應用Docker容器技術的動态代碼測試-19 小.jpg
圖18|查看build Pipeline結果


共享目錄中生成(chéng)了測試報告Full_Status.html,用戶可以在宿主機上進(jìn)行查看:


Windows上應用Docker容器技術的動态代碼測試-20 小.jpg
圖19|宿主機生成(chéng)的測試報告


4.4 引入看闆工具Squore分析測試結果
 
看闆管理工具Squore可以在Jenkins Pipeline中進(jìn)行部署和配置,自動導入VectorCAST測試結果進(jìn)行分析,以便用戶直觀地查看代碼質量和趨勢分析,實現對(duì)項目管理和決策的優化。


Windows上應用Docker容器技術的動态代碼測試-21 小.jpg
圖20|引入Squore看闆工具分析測試結果