为什么docker不能通过定制configuration提交一个Jenkins容器?
我拉了一张jenkins的形象,并启动它。 然后我在那个容器上做了一些configuration。 现在我想将所有的configuration保存到一个新的图像。 以下是我使用的命令:
$ 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正在运行。
现在我使用下面的命令来提交我的更改并创build一个新的图像:
$ docker commit f214096e4847 my_ci/1.0 sha256:d83801a700c4060326a5209b87281bfb0e93f46207d960038ba2d87628ddb90c
然后我停止当前的容器并从my_ci / 1.0映像运行一个新的容器:
$ docker stop f214096e4847 f214096e4847 $ docker run -d –name myci -p 8081:8080 my_ci / 1.0 aba1660be200291d499bf00d851a854c724193c0ee2afb3fd318c36320b7637e
但新的容器不包括我所做的任何更改。 它看起来像一个容器从原始jenkins图像创build。 如何在使用docker commit时保存我的数据?
EDIT1
我知道我可以添加一个卷来保存configuration数据如下:
-v my_path:/var/jenkins_home
但我真的想把它保存在docker上的图像。 所以用户不需要从主机提供configuration。
知道这不是一个好方法很重要。 正如在评论中告诉你的那样。 推荐的方法是安装卷。
但如果你真的想要在图像中的音量,我可以提出另一种方式。 您可以创build自己的图像派生自官方形象:
克隆原始图像的git回购
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
进行一次编辑。 用mkdir
命令replaceVOLUME
# 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
重build自己的形象:
docker build -t my-jenkins:1.0
开始你自己的jenkins +安装一些插件+创build一些工作。
docker run -d -p 8080:8080 -p 50000:50000 my-jenkins:1.0
当您准备好创build所需的作业时,您可以将容器提交为图像。
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
这将在你的情况下工作。 但正如我所说。 这不是build议。 它使你的内容依赖于图像。 所以当你想要执行更新时更加困难。 而且你的图片可能太大(大小)。
- 在Docker容器中连接本地的psql db和web app
- 无法使用Go客户端从Docker访问stdout
- 在docker-compose.yml文件中为Windows 10 home设置卷
- docker代理密码清除文本?
- 如何使用谷歌云数据存储模拟器和Java实现docker形象
- 为什么部署在Docker容器上的Spring云Netflix应用程序需要明确设置eureka.instance.hostname?
- 如何在Docker构build期间在Dockerfile中支持http_proxy或逻辑控制?
- 如何从Docker容器连接到本地Redis服务器
- docker.image.withRun中的多个卷,用于Jenkinspipe道