docker構建隨容器啟動而啟動的web服務
背景
基於jdk1.7.0_79,tomcat7.0,映象centos:6.9這些資源,通過命令:
docker run -it -p 8080:8080 --name tomcat -v /home/tomcat:/home/tomcat centos:6.9 bin/bash
建立了容器tomcat,進入容器後,進入到容器的/home/tomcat目錄下,解壓壓縮檔案,把檔案移動到容器的/usr/local目錄下面。vi /etc/profile新增java與tomcat環境設定。
上面簡略構建了tomcat容器。然後退出容器:exit,執行:
docker commit tomcat centos:tomcat
基於映象centos:6.9映象建立新的版本:centos:tomcat。
本人有個專案,專案的war包是:rest.war。我把war包放入宿主機的/home/tomcat目錄下,執行命令:
docker run -id -p 8081:8080 --name rest -v /home/tomcat:/home/tomcat centos:tomcat
建立新的容器rest並在後臺執行,執行:
docker exec -it rest bash
進入容器,進入到/home/tomcat,解壓rest.war包,到rest目錄下:
cd /home/tomcat mkdir rest cd rest cp ../rest.war . rm -rf ../rest.war jar -xvf rest.war
然後在tomcat目錄下的server.xml新增如下:
<Context path="rest" docBase="/home/tomcat/rest" allowLinking="true"></Context>
上述配置完畢後,在宿主機執行命令:
docker exec -it rest /usr/local/tomcat7.0/bin/catalina.sh run
一直提示:/rest,記憶體洩漏(memery leak),進入容器執行啟動tomcat正常。
操作
由於我要通過jenkins整合,上述那個是不滿足我後期要求的。就進行centos:tomcat,我寫了個簡單的Dockerfile,在啟動容器時就能啟動tomcat服務。Dockerfile如下:
FROM centos:tomcat
CMD /usr/local/tomcat7.0/bin/catalina.sh run
進入到Dokcerfile所在目錄,執行命令:docker build -t centos:rest .
執行成功後。執行命令:docker container ls -a,檢視所有容器。執行名:docker container rm -f rest,強制刪除容器rest。
然後執行命令:docker container prune ,刪除所有容器。容器刪除成功後,執行命令:
docker run -id -p 8080:8080 --name rest -v /home/tomcat:/home/tomcat centos:rest
這個時候在宿主機執行命令:ifconfig,檢視宿主機ip,假如為:192.168.78.12,在瀏覽器輸入:http://192.168.78.12:8080/rest,能成功進入到rest的wen頁面。
通過docker start rest啟動web服務,通過docker stop rest關閉web服務。這兩個命令在jenkins中整合打包部署war包時,在shell中是很好用的!
以上是操作例項,在內網,無法截圖,如果有問題,可以加群,進行討論!