一 概述
Docker發佈版本應該與現有的版本發佈儘可能一致,參考jenkins的版本發佈過程;我認爲maven庫和docker庫有不少相似的地方,所以打包過程參考maven的打包過程;重點實現docker自動打包、push、pull、run、kill相關流程的控制。
二 需求分析
一、部署和目前的jenkins發佈流程基本保持一致,目前版本發佈的觸發條件有:定時發佈、手工發佈,發佈過程包括:下載代碼、構建、中止tomcat、清除緩存、當期版本、上傳war包、上傳且替換配置文件、啓動tomcat等步驟。 java
二、針對使用docker容器的,須要增長構建鏡像上傳鏡像的過程web
jekins 和 web服務器須要有docker環境,包括docker和docker-composedocker
整體流程shell
1 下載代碼打包
1)代碼路徑下面要包含各套環境的配置文件信息,centos
2 docker鏡像版本定義
docker鏡像的當期版本使用${BUILD_NUMBER},上一版本使用$$((${BUILD_NUMBER}-1))緩存
3 準備物料
壓縮環境配置文件爲evnconfig.zip,拷貝到Dockerfile目錄;tomcat
拷貝war包到Dockefile目錄。服務器
4 Dockerfile構建鏡像
Dockerfile以下:app
#父鏡像webapp
FROM centos7-tomcat7-jdk7:1.0
#維護者
MAINTAINER luo tian "tian@gmail.com
#同步物料
ADD document.war.tar /root/tomcat7/webapp
ADD envconfig.tar /root/tomcat7/webapp
#暴露訪問端口
EXPOSE 8080
#啓動服務
ENTRYPOINT sh /root/tomcat7/bin/startup.sh
構建命令以下:docker build -t xx.com/ecf/document.war:v1.xx .
註解:鏡像名稱是部分組成:倉庫url/項目名稱/鏡像名稱:鏡像版本
Push鏡像
#登錄倉庫
docker login yy.com
#上傳鏡像
docker push xx.com/ecf/document.war:v1.xx
docker倉庫查看鏡像
5 目標服務器執行shell命令
#中止容器
docker kill document.war
#刪除容器
docker rm document.war
#啓動新容器
docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /root/tomcat7/logs:/var/tomcat7/logs --name document.war -d xx.com/document.war:1.xx
#刪除舊鏡像
docker rmi xx.com/document.war:1.xx
完整Dockerfile代碼
- FROM y.com/test/centos7-jdk7-tomcat8:2.0.1
- MAINTAINER luo,ten <luoten@midea.com>
-
- # Install war
- RUN mkdir /apps/document.war
- RUN mkdir /apps/tomcat8/conf/Catalina
- RUN mkdir /apps/tomcat8/conf/Catalina/localhost
- RUN mkdir /apps/document.war_work
- COPY target/document.war /apps/document.war
- ADD document.war.xml /apps/tomcat8/conf/Catalina/localhost
完整docker鏡像編譯服務器執行的代碼
- cd /root/jenkins_home/workspace/DEV-DOCUMENT/document.war/target/
- unzip document.war-0.0.1-SNAPSHOT.war -d document.war
- cd ../
- docker build -t y.com/test/document.war:${BUILD_NUMBER} .
- docker login -p admin123 -u admin y.com
- docker push y.com/test/document.war:${BUILD_NUMBER}
- docker rmi y.com/test/document.war:${BUILD_NUMBER}
完整docker應用說在服務器的執行代碼
- docker kill document.war
- docker rm -f document.war
- docker rmi y.com/test/document.war:$((${BUILD_NUMBER}-1))
- docker run -v /root/document.war/logs:/apps/tomcat8/logs --name document.war -p 8081:8080 -itd --privileged y.com/test/document.war:${BUILD_NUMBER} /usr/sbin/init