vaa*_*aab 10 git commit docker
我想利用docker镜像的缓存/分层来节省带宽,磁盘空间和花费的时间.
让我们说:
我应该如何在仅包含bugfix的最后一个图像上自动创建新的docker commit?
我的目标是只需要下载小的bugfix diff来获取已下载前一个图像的docker主机的新图像.
这是我目前关于它的反思:
docker commit某种方式结束使用以保存图像中的更新.感谢您对如何实现这一目标的任何见解!
编辑:使用多个Dockerfile似乎是另一种方法,对于类似的问题,请访问http://jpetazzo.github.io/2013/12/01/docker-python-pip-requirements/.看来我需要动态生成dockerfiles.
这是使用来更新现有图像的方法docker commit。
使用您要修改的图像启动一个容器:
docker run -t -i IMAGE /bin/bash
Run Code Online (Sandbox Code Playgroud)
请注意,您可能需要访问一些主机文件/目录以将更改导入容器:
docker run -t -i -v /host/location:/mnt/share IMAGE /bin/bash
Run Code Online (Sandbox Code Playgroud)
然后使用Ctrl-D或退出exit。
如果要在脚本中自动执行此操作,则需要获取下一步的容器ID。您将希望直接发出命令,而不是调用bash的交互式会话:
container_id=$(docker run -d -v /host/location:/mnt/share IMAGE /bin/bash -c "
## any bash code
rsync -av --delete --exclude .git /mnt/share /my/app/
cd /my/app
./autogen.sh
")
Run Code Online (Sandbox Code Playgroud)将修改后的容器文件系统作为新映像提交:
docker commit CONTAINER_ID IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)
注意:您可能要使用与首次启动容器时使用的IMAGE_NAME相同的名称。这将有效地更新您的图像。
其他问题:
对先前图像进行的任何修改都应尽量减少在最后一个图像上创建的新层。规则可能取决于您使用的是BTRFS(块级修改实际上将在“层”中)还是AUFS(文件级修改)。最好是避免使用相同的文件(避免更换整个源文件cp -a,git checkout-index,赞成rsync或git checkout)。
你需要在你的虚拟机上安装了一些工具,让你可以让你的更新(可能是git,rsync...)。但是不要忘了,由于已装载的主机卷,您还可以提供脚本(甚至完整的工具)。
创建的图像不是正统图像,也不来自Dockerfile。您可能应该定期从官员那里重建一个全新的形象Dockerfile。或者至少通过使所有图像直接基于一张正式图像来尽量减少分层。
| 归档时间: |
|
| 查看次数: |
7172 次 |
| 最近记录: |