如何在不创build新映像的情况下升级Docker镜像?

这似乎是最简单的问题,我找不到答案。

  1. 我build立一个docker形象。
  2. 运行docker images显示它是存在的。
  3. 然后我添加一个新的线到Docker文件。
  4. 然后我重build图像。
  5. 旧图像仍然在docker images ,现在有一个新的形象。

如何更新旧图像而不创build新图像?

我的docker命令: docker build -t nick_app . --force-rm --no-cache 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"] 

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 

之后 :Dockerfile:

 FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y \ build-essential CMD ["echo", "Sup"] 

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 

我所做的每个dockerfile更改都会在重build时创build一个新的none映像。 他们是累积的,所以每次我做一个改变和重build我得到另一个none形象。

每次我改变docker文件时,如何摆脱那个中间none的东西?

那些<none>:<none>实际上是您的应用程序的旧版本,它已经失去了它的命名指针,因为你已经将nick_app:latest移到了你的新版本。

当build立你的形象,我不认为你可以告诉它破坏旧的形象,它只会创build一个新的。 但有一个命令可以帮助你列出或删除那些晃动的图像:

 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.