Jenkins Docker映像,是否要使用绑定挂载?

时间:2019-06-28 17:34:51

标签: docker jenkins

我正在阅读Jenkins Docker README的这一部分,从我目前的理解来看,似乎有一部分与自己矛盾。 https://github.com/jenkinsci/docker/blob/master/README.md

在我看来,据说不使用绑定安装,然后强烈建议使用绑定安装?

  

注意:避免使用从主机上的文件夹到/ var / jenkins_home 的绑定挂载,因为这可能会导致文件许可   问题(在容器内部使用的用户可能无权   主机上的文件夹)。如果您确实需要绑定安装   jenkins_home,确保主机上的目录可通过以下方式访问   容器内的jenkins用户(jenkins用户-uid 1000)或使用   -u some_other_user参数和docker run。

     

docker run -d -v jenkins_home:/ var / jenkins_home -p 8080:8080 -p   50000:50000 jenkins / jenkins:lts这将以分离模式运行Jenkins   加上端口转发和音量。您可以使用   命令“ docker logs CONTAINER_ID”以检查首次登录   令牌。容器的ID将从上面的命令输出中返回。

     

备份数据

     

如果将装载绑定到卷中,则只需备份   该目录(即jenkins_home)随时显示。

     

强烈建议。像对待数据库一样对待jenkins_home目录-在Docker中,通常会将数据库放在   一卷。

您是否使用绑定安装?你会推荐他们吗?为什么或者为什么不?该文档似乎模棱两可。

1 个答案:

答案 0 :(得分:1)

如前所述,语法为for a volume

docker run -d -v jenkins_home:/var/jenkins_home -n jenkins ...

定义了一个名为jenkins_homes的Docker卷,它将在以下位置创建:
 /var/lib/docker/volumes/jenkins_home

想法是您可以轻松backup said volume

$ mkdir ~/backup
$ docker run --rm --volumes-from jenkins -v ~/backup:/backup ubuntu bash -c “cd /var/jenkins_home && tar cvf /backup/jenkins_home.tar .”

并将其重新加载到另一个Docker实例。

这不同于bind-mounts,后者确实涉及构建一个 new Docker映像,以便能够由本地用户(定义的默认用户instrad)挂载本地文件夹所有者。在Jenkins官方图片中:1000:1000

FROM jenkins/jenkins:lts-jdk11

USER root
ENV JENKINS_HOME /var/lib/jenkins
ENV COPY_REFERENCE_FILE_LOG=/var/lib/jenkins/copy_reference_file.log

RUN groupmod -g <yourId>jenkins
RUN usermod -u <yourGid> jenkins

RUN mkdir "${JENKINS_HOME}"
RUN usermod -d "${JENKINS_HOME}" jenkins
RUN chown jenkins:jenkins "${JENKINS_HOME}"
VOLUME /var/lib/jenkins

USER jenkins

请注意,您必须声明一个 new 卷(此处为/var/lib/jenkins),因为正如jenkinsci/docker issue 112所示,已经声明了官方/var/jenkins_home路径作为Jenkins官方图片中的VOLUME,则无法对其进行chown或chmod。

该方法的优点是无需使用Docker即可查看Jenkins主页的内容。

您可以通过以下方式运行它:

docker run -d -p 8080:8080 -p 50000:50000 \
  --mount type=bind,source=/my/local/host/jenkins_home_dev1,target=/var/lib/jenkins \
  --name myjenkins \
  myjenkins:lts-jdk11-2.190.3
sleep 3
docker logs --follow --tail 10 myjenkins