docker镜像备份恢复_Jenkins配合Docker自动化部署
这里就跳过jenkins的安装部署过程了,网上很多教程可以自行查看;docker的使用也不多说了,熟悉一下docker常用命令,和dockerfile就差不多了测试环境如下:centos7虚拟机 1ip:192.168.0.102centos7虚拟机 2ip:192.168.0.103安装了JDK、Tomcat、docker、git、maven...
这里就跳过jenkins的安装部署过程了,网上很多教程可以自行查看;
docker的使用也不多说了,熟悉一下docker常用命令,和dockerfile就差不多了
测试环境如下:
centos7 虚拟机 1 ip:192.168.0.102
centos7 虚拟机 2 ip:192.168.0.103
安装了JDK、Tomcat、docker、git、maven
虚拟机1安装配置了jenkins(我使用的是jenkins.war的形式部署到Tomcat下启动的)
测试项目一个很简单的controller方法:

操作过程:
-
jenkins默认是英文的,可以装中文插件;
-
jenkins中的插件很多;有些环境插件必须安装;
-
jenkins构建一个新的maven项目文件;
-
配置项目的源码仓库git或者SVN/gitlab等其他的;
-
配置maven打包命令;
-
配置打包完成之后执行的shell命令也可以是shell脚本;
-
如果是想部署到多台服务器上则可以配置不同的服务器信息;

jenkins安装部署好了之后有个web可视化管理页面;
其中主要注意环境配置:
-
maven的环境配置maven的settings.xml文件指定;

-
JDK的环境配置:

-
git(这里我用的是git,也用SVN或者gitlab等其他的代码仓库):
创建一个项目任务进去就是配置源码

指定maven打包命令;
以及指定打包完成之后执行的shell命令

Docker File脚本:
FROM java:8
MAINTAINER lifuping 1259452237@qq.com
#创建容器操作目录
RUN mkdir -p /opt/jenkins/
#复制宿主机文件到docker容器里
COPY startup.sh /opt/jenkins/
COPY Test-Jenkins-s-1.0-SNAPSHOT.jar /opt/jenkins/
# 指定当前操作目录
WORKDIR /opt/jenkins/
#赋予启动脚本执行权限
RUN chmod a+x /opt/jenkins/startup.sh
# 运行脚本
CMD /opt/jenkins/startup.sh
startup.sh 启动脚本:
#!/bin/bash
exec java -jar /opt/jenkins/Test-Jenkins-s-1.0-SNAPSHOT.jar
createDocker.sh核心脚本:
#打包成Docker镜像的脚本
#!/bin/bash
#操作项目路径(Dockerfile存放的路径)
BASE_PATH=/root/Test-Jenkins
# jenkins生成源jar路径
SOURCE_PATH=/root/.jenkins/workspace
#docker 镜像/容器名字(只能全小写不能包含大写或者特殊字符)
SERVER_NAME=testjenkins
#指定映射端口
port=8093
#dockerfile的名称
DOCKER_FILENAME=Dockerfile
#jar包的名称
JAR_NAME=Test-Jenkins-s-1.0-SNAPSHOT
#项目名称
PROJECT_NAME=Test-Jenkins
#docker容器内的映射目录(这里映射主机的目录挂载到容器)
CONTAINER_FILE=/opt/jenkins/
#当前时间
DATE=`date +%Y%m%d%H%M`
# 将jenkins最新的构建jar包 移动到项目目录下
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$PROJECT_NAME/target/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
cp -f $SOURCE_PATH/$PROJECT_NAME/target/$JAR_NAME.jar $BASE_PATH
#复制jar过去可能会没有权限。因此最好赋予足够权限
chmod -R 777 $BASE_PATH/$JAR_NAME.jar
echo "迁移完成"
}
# 将历史版本jar包进行备份
function backup(){
#如果备份目录不存在则创建
if [ ! -d "$BASE_PATH/backup" ]; then
mkdir $BASE_PATH/backup
echo "创建备份目录:$BASE_PATH/backup"
fi
if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
echo "$JAR_NAME.jar 备份..."
cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$JAR_NAME-$DATE.jar
echo "备份 $BASE_PATH/backup/$JAR_NAME-$DATE.jar 完成"
else
echo "$BASE_PATH/$JAR_NAME.jar不存在,跳过备份"
fi
}
# 构建docker镜像;
# 如果已经存在则重启即可(
# 因为进行宿主机和容器目录映射所以只需要把最新的jar移动到映射目录下重启容器就可以了)
# (不需要每次多删除容器,删除镜像在重新再构建)
function build(){
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
#如果镜像已存在则不用重新构建;不存在则构建
if [ -n "$IID" ]; then
echo "存在SERVER_NAME镜像,IID=$IID"
else
echo "不存在SERVER_NAME镜像,开始构建镜像"
cd $BASE_PATH
#开始构建docker镜像 -t 指定镜像名字; 看需要可以加上-f 指定Dockerfile的路径;如果不加默认用当前目录下的Dockerfile
docker build -f $BASE_PATH/$DOCKER_FILENAME -t $SERVER_NAME .
fi
#如果容器已启动则重启;未启动则启动
if [ -n "$CID" ]; then
echo "存在$ERVER_NAME容器,CID=$CID,重启docker容器 ..."
docker restart $SERVER_NAME
echo "$ERVER_NAME容器重启完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
#启动docker容器 --name指定容器名称 -idt容器后台运行并;-v 将主机的目录挂载到容器上的目录
#这里映射主机的目录挂载到容器上,之后换包就不用重新构建docker镜像,重启容器就行了
docker run --name $SERVER_NAME -v $BASE_PATH:$CONTAINER_FILE -p $port:$port -idt $SERVER_NAME
echo "$ERVER_NAME容器创建完成"
fi
}
# 主方法入口
function run(){
backup
transfer
build
}
#调用入口方法
run
注释:DockerFile脚本是用于构建docker镜像
startup.sh脚本是用于启动jar程序
createDocker.sh脚本先是进行历史jar备份;在移动项目jar包到指定的工作目录下(jenkins打包的jar会生成到jenkins的安装目录下);构建docker镜像;如果docker镜像已经存在则重启具体可看脚本注释很详细
进行构建项目:

查看构建日志:


从日志中可以看出;先是进行了maven打包成jar然后执行了
createDocker.sh脚本;开始移动jar,在备份,在构建docker镜像,最后启动docker容器;
测试访问浏览器:输入接口地址

之后有代码改动只需要提交代码到仓库
比如提交到GIT上:
先add到本地,在commit提交到本地仓库,最后push提交到远程仓库上
在到jenkins中重新构建项目就会自动打包部署上;方便的一匹
jenkins中还有其他强大功能:job定时任务,以及邮件通知;和自动构建部署(意思就是代码仓库检查到有代码提交,代码仓库就会通知jenkins自动进行构建部署多不需要人工去点击构建)
项目地址:
https://gitee.com/lifuping/Test-Jenkins.git

更多推荐




所有评论(0)