这可能是在某个时候问过的,但我在任何地方都找不到。我似乎无法(或不知道如何)将更改提交到docker映像,而不会丢失我正在提交的容器中的文件更改。这是我的用例。
我在Windows上使用Boot2Docker,
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
我从dockerHub下载了詹金斯的最新版本。
docker pull jenkins
我运行它,重新路由它的网络接口端口
docker run -dt -p 8010:8080 jenkins
我去界面安装一些插件。我安装插件,然后重新启动Jenkins。然后我尝试提交我的更改。
docker commit $(docker ps -lq) <my_user_name_on_docker_hub>/<name_of_the_new_image>
dockerps-lq返回最后一个运行的容器的id。由于我现在只运行这个容器,我确信它返回了正确的id(我也通过执行dockerps并实际查找容器来检查它)
然后我推动改变。
docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>
推送会遍历dockerHub上已经存在的所有修订,并跳过所有修订,直到到达最后一个并将四兆字节上传到注册表。然而,当我尝试运行这个新图像时,它只是詹金斯的基本图像,没有任何变化。没有我安装的插件。据我所知,应该提交对映像的联合文件系统的更改(jenkins插件作为二进制文件安装在那里)。我需要一个新的图像,上面有我的更改。
我做错了什么?
编辑:
我创建了几个测试作业,运行它们,使用dockerexec-it-bash在文件系统中四处走动,jenkins在/var/jenkinshome/jobs下为每个作业创建了一个新目录,但当我执行dockerdiff时,它显示只创建了临时文件。在提交、推送、停止容器并从刚刚推送的图像中运行一个新的容器之后,作业文件夹与其他所有内容一起消失。
编辑2:
我尝试在其他文件夹中创建文件,dockerdiff似乎看到了除了/var/jenkinshome/directory之外的其他地方的更改。
第3版:
这似乎是相关的
Jenkins DockerHub page
如何使用此图像
docker运行-p 8080:8080 jenkins这将在
/var/jenkins_home。所有Jenkins数据都存在其中-包括插件
和配置。你可能会想让这成为一个持久的
体积:
docker运行--name myjenkins-p 8080:8080-v/var/jenkins_home jenkins
myjenkins命名容器的卷将是
持久的
还可以从主机将装载绑定到卷中:
首先,确保jenkins用户可以在
容器(jenkins用户-uid 102正常-或使用-uroot),然后:
docker运行-p 8080:8080-v/your/home:/var/jenkins_home jenkins
我尝试使用-v切换运行该命令,但这并没有使我的提交变得更加持久。