如何升级docker映像而不创建新映像?
这似乎是我找不到答案的最简单的问题如何升级docker映像而不创建新映像?,docker,dockerfile,Docker,Dockerfile,这似乎是我找不到答案的最简单的问题 我建立了一个码头工人的形象 运行docker images显示它存在 然后,我向Docker文件添加一个新行 然后我重建图像 旧图像仍在docker images中,现在有一个新图像 如何简单地更新旧图像而不创建新图像 我的docker命令:docker构建-t nick\u应用程序--强制rm--无缓存 (注意:我刚刚抛出了--force-rm命令和--no-cache命令,因为它似乎可以工作。) 之前: Dockerfile: FROM ruby:2.3.
docker images
显示它存在docker构建-t nick\u应用程序--强制rm--无缓存
(注意:我刚刚抛出了--force-rm命令和--no-cache命令,因为它似乎可以工作。)
之前:
Dockerfile:
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y
CMD ["echo", "Sup"]
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y \
build-essential
CMD ["echo", "Sup"]
docker图像命令:
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
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:
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y
CMD ["echo", "Sup"]
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y \
build-essential
CMD ["echo", "Sup"]
docker图像命令:
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
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
创建的存储库标记图像ID大小
nick_应用程序最新bcf9b3667202 3秒前746.9 MB
421662154c3f 10分钟前746.9 MB
ruby 2.3.3 d00ebde6a601 2天前730.1 MB
hello world最新c54a2cc56cbb 4个月前1.848 kB
我所做的每个dockerfile更改都会在重建时创建一个新的none
图像。它们是累积的,所以每次我进行更改和重建时,都会得到另一张none
图像
每次我更改dockerfile时,如何摆脱中间的无。那些:
实际上是你的应用程序的旧版本,自从你将nick\u 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.
毕竟,您正在创建图像的新版本,因此发生的事情是有意义的。您必须以某种方式对其进行包装,即使用一个bash脚本来调用,而不是直接调用docker build
(在答案中显示命令)当我对文本文件进行更改时,它在技术上是文本文件的新版本,但文字处理器仍然可以在不创建中间文件的情况下处理新文本文件的更新。这似乎是Docker应用程序peeps的一个有用案例:如果我使用相同的标记重建,则假定它将是相同的图像,并删除所有中间版本/旧版本。感谢您提供的信息。不喜欢没有标志或选项自动执行此操作。这似乎是一个非常常见的用例。我有捷径docker rmi$(docker images-f“dangling=true”-q)
,但每次重建都要这样做似乎有点不雅观。dicker Imager rm
和docker rmi
之间有什么区别吗?@CpILL这是docker,不是dicker lol。docker rmi要删除具有相同id但不同标签的图像。而docker image rm将删除docker image,这不在上述场景下。