Docker自動化部署方案

一 概述

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代碼

  1. FROM y.com/test/centos7-jdk7-tomcat8:2.0.1  
  2. MAINTAINER luo,ten <luoten@midea.com>  
  3.   
  4. # Install war  
  5. RUN mkdir /apps/document.war  
  6. RUN mkdir /apps/tomcat8/conf/Catalina  
  7. RUN mkdir /apps/tomcat8/conf/Catalina/localhost  
  8. RUN mkdir /apps/document.war_work  
  9. COPY target/document.war /apps/document.war  
  10. ADD document.war.xml /apps/tomcat8/conf/Catalina/localhost  

完整docker鏡像編譯服務器執行的代碼

  1. cd /root/jenkins_home/workspace/DEV-DOCUMENT/document.war/target/  
  2. unzip document.war-0.0.1-SNAPSHOT.war -d  document.war  
  3. cd  ../  
  4. docker build -t y.com/test/document.war:${BUILD_NUMBER} .  
  5. docker login -p admin123 -u admin y.com  
  6. docker push y.com/test/document.war:${BUILD_NUMBER}  
  7. docker rmi  y.com/test/document.war:${BUILD_NUMBER}  

完整docker應用說在服務器的執行代碼

 
  1. docker kill document.war  
  2. docker rm -f document.war  
  3. docker rmi y.com/test/document.war:$((${BUILD_NUMBER}-1))  
  4. 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  
相關文章
相關標籤/搜索