为什么docker不能使用自定义配置提交Jenkins容器?

时间:2016-12-13 00:39:09

标签: jenkins docker

我拉了一张詹金斯图像然后启动它。然后我在那个容器上做了一些配置。现在我想将所有配置保存到新图像中。以下是我使用的命令:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
f214096e4847        jenkins             "/bin/tini -- /usr/lo"   About an hour ago   Up 1 seconds        50000/tcp, 0.0.0.0:8081->8080/tcp   ci

从上面的输出中,您可以看到jenkins容器f214096e4847正在运行。

现在我使用下面的命令提交我的更改并创建一个新图像:

$ docker commit f214096e4847 my_ci/1.0
sha256:d83801a700c4060326a5209b87281bfb0e93f46207d960038ba2d87628ddb90c

然后我停止当前容器并从my_ci / 1.0 image运行一个新容器:

$ docker stop f214096e4847 f214096e4847 $ docker run -d --name myci -p 8081:8080 my_ci / 1.0 aba1660be200291d499bf00d851a854c724193c0ee2afb3fd318c36320b7637e

但新容器并未包含我所做的任何更改。它看起来像是从原始jenkins图像创建的容器。如何在使用docker commit时保留我的数据?

EDIT1

我知道我可以添加一个卷来保存配置数据,如下所示:

-v my_path:/var/jenkins_home

但我真的想将它保存在docker图像上。因此,用户无需从其主机提供配置。

1 个答案:

答案 0 :(得分:2)

了解这不是一个好方法,这一点非常重要。正如评论中告诉你的那样。推荐的方法是安装卷。

但如果你真的想要你的图像中的音量我可以提出另一种方式。您可以创建自己的官方图像衍生图像:

克隆原始图像的git repo

git clone https://github.com/jenkinsci/docker.git

这包含以下内容:

CONTRIBUTING.md  Jenkinsfile  docker-compose.yml  install-plugins.sh  jenkins-volume  plugins.sh  update-official-library.sh
Dockerfile       README.md    init.groovy         jenkins-support     jenkins.sh      tests       weekly.sh

您只需在Dockerfile进行一次编辑即可。用VOLUME命令替换mkdir

# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
#VOLUME /var/jenkins_home
RUN mkdir -p /var/jenkins_home

重建自己的形象:

docker build -t my-jenkins:1.0

启动你自己的jenkins +安装一些插件+创建一些工作。

docker run -d -p 8080:8080 -p 50000:50000 my-jenkins:1.0

当您准备好创建所需的作业时,您可以将容器作为图像提交。

docker commit 30c5889032a8 my-jenkins-for-developers:1.0

这个最新的jenkins容器默认包含你的插件+作业。

docker run -d -p 8080:8080 -p 50000:50000 my-jenkins-for-developers:1.0

这适用于您的情况。但正如我所说。不建议这样做。它使您的内容依赖于图像。因此,当您想要执行更新时,这会更加困难。您的图像也可能太大(尺寸)。