如何升级泊坞窗图像而不创建新图像?
问题描述:
这似乎是最简单的问题,我无法找到答案。如何升级泊坞窗图像而不创建新图像?
- 我构建了一个docker镜像。
- 运行
docker images
显示它存在。 - 然后我将一个新行添加到Docker文件中。
- 然后我重建图像。
- 旧图像仍在
docker images
现在有一个新的图像。
如何更新旧图像而不创建新图像?
我的搬运工命令:docker build -t nick_app . --force-rm --no-cache
(注:我刚才扔那些--force-rm命令和--no-cache命令”,因为它似乎是它的工作)
之前:
Dockerfile:
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y
CMD ["echo", "Sup"]
搬运工图像命令:
REPOSITORY TAG IMAGE ID CREATED SIZE
nick_app latest 421662154c3f 9 minutes ago 746.9 MB
ruby 2.3.3 d00ebde6a601 2 days ago 730.1 MB
hello-world latest c54a2cc56cbb 4 months ago 1.848 kB
后: Dockerfile:
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y \
build-essential
CMD ["echo", "Sup"]
泊坞窗图像命令:
REPOSITORY TAG IMAGE ID CREATED SIZE
nick_app latest bcf9b3667202 3 seconds ago 746.9 MB
<none> <none> 421662154c3f 10 minutes ago 746.9 MB
ruby 2.3.3 d00ebde6a601 2 days ago 730.1 MB
hello-world latest c54a2cc56cbb 4 months ago 1.848 kB
每dockerfile变化让我上创建重建一个新的形象none
。它们是累积的,所以每次我进行更改和重建时,我都会得到另一个none
图像。
每次我改变码头文件时,如何摆脱中间的none
?
答
这些<none>:<none>
实际上是您的应用程序的旧版本,因为您已将nick_app:latest
移至新版本,所以它已失去其指定指针。
当建立你的形象,我不认为你可以告诉它破坏旧图像,它只会创建一个新的。 但是有一个命令,可以帮助你列出或删除这些悬挂图片:
docker images --filter dangling=true #lists all images that are dangling and has no pointer to it
docker rmi `docker images --filter dangling=true -q` #Removes all those images.
+0
感谢您的信息。 不爱,没有标志或选项自动执行此操作。 这似乎是一个非常常见的用例。 我已经有了捷径'docker rmi $(docker images -f“dangling = true”-q)' 但是在每次重建时都要做到这一点,似乎有点不雅。 –
毕竟,你正在创建图像的新版本,因此正在发生的事情是有意义的。你必须以某种方式来包装它,也就是说你有一个你直接调用的bash脚本,而不是'docker build'(把答案显示在答案中)。 – Arran
当我对文本文件进行更改时,它在技术上是文本文件的新版本,但文字处理器仍会处理更新新文本文件而不创建中间文件。 似乎这可能是Docker应用程序窥探的有用案例:如果使用相同标记重建,假定它将是相同的图像并删除所有中间体/旧版本。 –