使用Docker构建持续集成与自动部署的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)代码路径下面要包含各套环境的配置文件信息,如下图:
2docker镜像版本定义
docker镜像的当期版本使用${BUILD_NUMBER},上一版本使用$$((${BUILD_NUMBER}-1))
3准备物料
压缩环境配置文件为evnconfig.zip,拷贝到Dockerfile目录;
拷贝war包到Dockefile目录。
4Dockerfile构建镜像
Dockerfile如下:
#父镜像
FROMcentos7-tomcat7-jdk7:1.0
#维护者
MAINTAINERluotian"tian@gmail.com
#同步物料
ADDdocument.war.tar/root/tomcat7/webapp
ADDenvconfig.tar/root/tomcat7/webapp
#暴露访问端口
EXPOSE8080
#启动服务
ENTRYPOINTsh/root/tomcat7/bin/startup.sh
构建命令如下:dockerbuild-txx.com/ecf/document.war:v1.xx.
注解:镜像名称是部分组成:仓库url/项目名称/镜像名称:镜像版本
Push镜像
#登陆仓库
dockerloginyy.com
#上传镜像
dockerpushxx.com/ecf/document.war:v1.xx
docker仓库查看镜像
5目标服务器执行shell命令
#停止容器
dockerkilldocument.war
#删除容器
dockerrmdocument.war
#启动新容器
dockerrun-p8080:8080-v/var/run/docker.sock:/var/run/docker.sock-v/root/tomcat7/logs:/var/tomcat7/logs--namedocument.war-dxx.com/document.war:1.xx
#删除旧镜像
dockerrmixx.com/document.war:1.xx
完整Dockerfile代码
[java]viewplaincopy
1.FROMy.com/test/centos7-jdk7-tomcat8:2.0.1
2.MAINTAINERluo,ten<luoten@midea.com>
3.
4.#Installwar
5.RUNmkdir/apps/document.war
6.RUNmkdir/apps/tomcat8/conf/Catalina
7.RUNmkdir/apps/tomcat8/conf/Catalina/localhost
8.RUNmkdir/apps/document.war_work
9.COPYtarget/document.war/apps/document.war
10.ADDdocument.war.xml/apps/tomcat8/conf/Catalina/localhost
完整docker镜像编译服务器执行的代码
[java]viewplaincopy
1.cd/root/jenkins_home/workspace/DEV-DOCUMENT/document.war/target/
2.unzipdocument.war-0.0.1-SNAPSHOT.war-ddocument.war
3.cd../
4.dockerbuild-ty.com/test/document.war:${BUILD_NUMBER}.
5.dockerlogin-padmin123-uadminy.com
6.dockerpushy.com/test/document.war:${BUILD_NUMBER}
7.dockerrmiy.com/test/document.war:${BUILD_NUMBER}
完整docker应用说在服务器的执行代码:
[java]viewplaincopy
1.dockerkilldocument.war
2.dockerrm-fdocument.war
3.dockerrmiy.com/test/document.war:$((${BUILD_NUMBER}-1))
4.dockerrun-v/root/document.war/logs:/apps/tomcat8/logs--namedocument.war-p8081:8080-itd--privilegedy.com/test/document.war:${BUILD_NUMBER}/usr/sbin/init
六待解决问题
1、目前很多系统内核不符合docker部署
FATA[0001]YourLinuxkernelversion2.6.32-504.el6.x86_64isnotsupportedforrunningdocker.Pleaseupgradeyourkernelto3.10.0ornewer.
2、docker重要配置
一、pull增加内部镜像仓库,配置文件或者启动命令增加:ADD_REGISTRY='--add-registryyy.com'
二、内外仓库采用http方式,配置文件或者启动命令增加:INSECURE_REGISTRY='--insecure-registryyy.com'(/usr/lib/systemd/system/docker.service)
三、docker、jenkins、git、svn等安装可能会遇到网络问题,因为需要安装一些相关依赖
3、应用必须使用maven或者ant打包