更新docker镜像给定对本地文件系统的更改

时间:2017-04-08 20:59:05

标签: docker

我正在尝试解决当我更改用于创建docker镜像的本地文件系统时如何更新现有图像。我认为我可以使用docker提交来做到这一点,但似乎这可以让你在正在运行的图像上更改文件系统时更改图像?

 /app.py 

从文件系统构建

 sudo docker build -t app 

现在对/app.py进行了本地更改。如何更改图像应用以反映对/app.py的更改?现在我不得不删除旧图像,然后创建一个新图像。

sudo docker rmi app 
sudo docker build -t app

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

首先,没有running image,只有running container。图像是以Docker方式提供的东西,您可以构建image,然后从中创建container

对于你的问题,我想你已经提到了你的选择:

  1. 重建您的图片
  2. 进入正在运行的容器内,进行更改并docker commit返回。就个人而言,如果docker build需要很长时间,我只会用这种方法修复一个小问题或对我的图片进行修补。
  3. Docker使用union FScopy on write来构建图片,这意味着如果您想要对图片进行更改,则无法就地更改图片,它会创建额外的图层(s )为了反映你的变化,在某些情况下它只会使用相同的图像名称。从交付的角度来看,我认为为每个版本构建一个新图像(具有不同的标记)是完全可以的,或者甚至应该以这种方式完成,这就是为什么你有一个Dockerfile,而图像不是只有你启动容器的东西,它们实际上是版本化的交付工件,你可以回滚到任何版本,如果你想要/需要。所以我认为你目前的解决方案还可以。

    这里还有一些文字:对于本地开发和测试,您可以在启动时将/app.py作为卷添加到容器中,例如docker run -v /path/to/host/app.py:/path/to/container/app.py your_base_image_to_run_app,然后您在其中更改任何内容本地FS到app.py,它会反映到容器。完成工作后,建立新图像。

答案 1 :(得分:0)

根据您当前的设计解决方案是创建新图像并指定相同的标记。

最佳解决方案是从docker镜像公开环境变量,并使用这些变量更新app.py,这样您就不需要每次都更改图像。只需一张图像即可。