如何在不创建新图像的情况下升级docker镜像?

mut*_*ity 6 docker dockerfile

这似乎是最简单的问题,我无法找到答案.

  1. 我建立了一个码头图像.
  2. 运行docker images表明它存在.
  3. 然后我向Docker文件添加一个新行.
  4. 然后我重建了图像.
  5. 旧图像仍在,docker images现在有一个新图像.

如何在不创建新图像的情况下简单地更新旧图像?

我的docker命令: 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"]
Run Code Online (Sandbox Code Playgroud)

docker images命令:

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
Run Code Online (Sandbox Code Playgroud)

之后:Dockerfile:

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y \
   build-essential
CMD ["echo", "Sup"]
Run Code Online (Sandbox Code Playgroud)

docker images命令:

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
Run Code Online (Sandbox Code Playgroud)

我创建的每个dockerfile更改都会none在rebuild上创建一个新图像.它们是累积的,所以每当我做出改变并重建时,我都会得到另一个none图像.

none每次我更改dockerfile时,如何摆脱那个中间体?

Mag*_*cky 9

这些<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.
Run Code Online (Sandbox Code Playgroud)

  • 谢谢(你的)信息。不喜欢没有标记或选项可以自动执行此操作。这似乎是一个非常普遍的用例。我有捷径`docker rmi $(docker images -f“ dangling = true” -q)`,但是每次重新构建都显得有些笨拙。 (3认同)