jenkins docker容器的备份和复用
jenkins配置文件备份:
docker cp focused_bhaskara:/var/jekins_home ./jenkins_home
其中focused_bhaskara为当前运行的jenkins容器名字,通过docker ps查看names即可得到。
docker create -v /var/jenkins_home --name jenkins-dv
制作data volume容器并运行:
1.将此前备份好的jenkins配置目录jenkins_home,copy到当前目录;
2.编辑Dockerfile如下:
FROM debian:jessie
VOLUME /var/jenkins_home/
ADD jenkins_home/ /var/jenkins_home/
RUN echo "This is jenkins data volume!"
build image:
docker build -t jenkinsdv .
3.构建自己的jenkins image,myjenk。
Dockerfile如下:
FROM jenkins:latest
USER root
RUN apt-get update \
&& apt-get install -y sudo \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
#COPY apache-maven-3.3.9-bin.zip /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.3.9/
RUN echo "This is jenkins data volume!"
build image:
docker build -t myjenk .
首次启动myjenk(DooD使docker命令生效):
docker run -d --name mydockerjenk -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -p 8080:8080 -p 50000:50000 myjenk
4.如此一来我们拥有两个image,分别是myjenk和jenkinsdv,运行以下命令完成jenkins的复用:
docker run --name jenkins-dv jenkinsdv
docker run -d -p 8080:8080 -p 50000:50000 --volumes-from jenkins-dv --name myjenkins myjenk
注意:假如同时启动多个jenkins容器并且同时使用相同的--volumes-from参数,那么他们共享这一个data volume并且同时向这一个data volume容器读写,有可能造成不想要的结果。
比如,我们有A,B两个jenkins容器。
A首先启动并执行job1,构建号20.
此时启动B容器,B容器job1会显示有20个构建。此时B执行一个job1构建,那么B的job1会有从1到21共计21个job1构建,而A只有20个。
此时A再次执行job1构建,则A可以看到构建22而看不到构建21,因为21是B执行的构建。同理,B看不到构建22.
若想要避免以上状况,可以再次开一个data volume容器并使B加载其volume启动。
还有一种处理方法就是,删除已经停止运行的共享的data volume容器,这样每个jenkins容器会重新新建一个各自的volume使用,但此时需要各自备份(见本文第一部分)。
注意:此时使用docker commit命令无法备份最新的更改!!详见https://docs.docker.com/engine/reference/commandline/commit/