jenkins - docker为什么无法使用自定义配置提交Jenkins容器?

标签 jenkins docker

我提取了 Jenkins 图像并启动了它。然后,我对该容器进行了一些配置。现在,我想将所有配置保存到新镜像中。以下是我使用的命令:

$ 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镜像运行一个新容器:

$ docker 停止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镜像上。因此,用户无需从其主机提供配置。

最佳答案

知道这不是一个好方法很重要。正如在评论中告诉您的那样。推荐的方法是挂载卷。

但是,如果您真的想要图像中的体积,我可以提出另一种方法。您可以根据官方图片创建自己的图片:

克隆原始图像的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

这将适合您的情况。但是正如我所说。不推荐。它使您的内容取决于图像。因此,当您要执行更新时会更加困难。同样,您的图像可能太大(大小)。

关于jenkins - docker为什么无法使用自定义配置提交Jenkins容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111976/

相关文章:

docker - 使用 Jenkinsfile 让容器运行

jenkins - Gradle发布插件无构建任务

jenkins - 如何从 $BUILD_LOG 变量中获取最后 20 行?

amazon-web-services - AWS CodeBuild - 基于来自 docker hub 的镜像的环境

amazon-web-services - 在 AWS/Azure 中运行但需要访问 GCLOUD 命令的容器化应用程序中,设置 gcloud 身份验证的最佳方法是什么?

docker - 如何将文件从服务器复制到Docker容器

shell - 为什么 && 而不是新的 RUN

docker - Docker Container运行周期过程以填充数据库

linux - 如何删除 Jenkins Maven 本地存储库中的旧 Artifact

jenkins - Travis可以像Jenkins一样本地安装吗?