我正在尝试解决当我更改用于创建docker镜像的本地文件系统时如何更新现有图像。我认为我可以使用docker提交来做到这一点,但似乎这可以让你在正在运行的图像上更改文件系统时更改图像?
/app.py
从文件系统构建
sudo docker build -t app
现在对/app.py进行了本地更改。如何更改图像应用以反映对/app.py的更改?现在我不得不删除旧图像,然后创建一个新图像。
sudo docker rmi app
sudo docker build -t app
任何帮助表示赞赏!
答案 0 :(得分:2)
首先,没有running image
,只有running container
。图像是以Docker方式提供的东西,您可以构建image
,然后从中创建container
。
对于你的问题,我想你已经提到了你的选择:
docker commit
返回。就个人而言,如果docker build
需要很长时间,我只会用这种方法修复一个小问题或对我的图片进行修补。 Docker使用union FS和copy 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,这样您就不需要每次都更改图像。只需一张图像即可。