如何在不创build新映像的情况下升级Docker镜像?
这似乎是最简单的问题,我找不到答案。
- 我build立一个docker形象。
- 运行
docker images
显示它是存在的。 - 然后我添加一个新的线到Docker文件。
- 然后我重build图像。
- 旧图像仍然在
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.