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

时间:2016-11-24 16:45:30

标签: docker dockerfile

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

  1. 我建立了一个码头图像。
  2. 运行docker images表明它已存在。
  3. 然后我在Docker文件中添加一个新行。
  4. 然后我重建了图像。
  5. 旧图片仍在docker images,现在已有新图片。
  6. 如何在不创建新图像的情况下简单更新旧图像?

    我的泊坞窗命令: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更改都会在重建时创建一个新的none图像。它们会累积,因此每次我进行更改并重建时,我都会获得另一张none图片。

    每次更改dockerfile时,如何摆脱中间none

1 个答案:

答案 0 :(得分:7)

那些<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.