【发布时间】:2017-04-09 01:14:36
【问题描述】:
这似乎是我找不到答案的最简单的问题。
- 我构建了一个 docker 映像。
- 运行
docker images表明它存在。 - 然后我在 Docker 文件中添加一个新行。
- 然后我重建图像。
- 旧图像仍在
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"]
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
之后: Dockerfile:
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 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 图像。
每次我更改 dockerfile 时,如何摆脱中间的 none?
【问题讨论】:
-
毕竟,您正在创建图像的新版本,所以发生的事情是有意义的。您必须以某种方式包装它,即有一个您调用的 bash 脚本,而不是直接调用
docker build(在答案中使用命令 show)。 -
这很有意义,当我对文本文件进行更改时,它在技术上是文本文件的新版本,但文字处理器仍会在不创建中间文件的情况下处理就地更新新文本文件。似乎这对于 Docker 应用程序窥视可能是一个有用的案例:如果我使用相同的标签重建假设它将是相同的图像并删除所有中间/旧版本。
标签: docker dockerfile