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/

posted on 2016-08-02 11:35  傻子才悲伤  阅读(1149)  评论(0编辑  收藏  举报

导航