我提取了 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/