Docker自动化部署方案

一 概述

Docker发布版本应该与现有的版本发布尽量一致,参考jenkins的版本发布过程;我认为maven库和docker库有很多类似的地方,因此打包过程参考maven的打包过程;重点实现docker自动打包、push、pull、run、kill相关流程的控制。

二 需求分析

1、部署和目前的jenkins发布流程基本保持一致,目前版本发布的触发条件有:定时发布、手工发布,发布过程包括:下载代码、构建、停止tomcat、清除缓存、当期版本、上传war包、上传且替换配置文件、启动tomcat等步骤。 

2、针对使用docker容器的,需要增加构建镜像上传镜像的过程

jekins 和 web服务器需要有docker环境,包括docker和docker-compose

 总体流程

1 下载代码打包

1)代码路径下面要包含各套环境的配置文件信息,

2 docker镜像版本定义

docker镜像的当期版本使用${BUILD_NUMBER},上一版本使用$$((${BUILD_NUMBER}-1))

3 准备物料

压缩环境配置文件为evnconfig.zip,拷贝到Dockerfile目录;

拷贝war包到Dockefile目录。

4 Dockerfile构建镜像

Dockerfile如下:

#父镜像

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  
posted @ 2017-12-14 17:15  GeminiMp  阅读(2347)  评论(0编辑  收藏  举报