如何升级docker映像而不创建新映像?

如何升级docker映像而不创建新映像?,docker,dockerfile,Docker,Dockerfile,这似乎是我找不到答案的最简单的问题 我建立了一个码头工人的形象 运行docker images显示它存在 然后,我向Docker文件添加一个新行 然后我重建图像 旧图像仍在docker images中,现在有一个新图像 如何简单地更新旧图像而不创建新图像 我的docker命令:docker构建-t nick\u应用程序--强制rm--无缓存 (注意:我刚刚抛出了--force-rm命令和--no-cache命令,因为它似乎可以工作。) 之前: Dockerfile: FROM ruby:2.3.

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

  • 我建立了一个码头工人的形象
  • 运行
    docker images
    显示它存在
  • 然后,我向Docker文件添加一个新行
  • 然后我重建图像
  • 旧图像仍在docker images中,现在有一个新图像
  • 如何简单地更新旧图像而不创建新图像

    我的docker命令:
    docker构建-t nick\u应用程序--强制rm--无缓存

    (注意:我刚刚抛出了--force-rm命令和--no-cache命令,因为它似乎可以工作。)

    之前:

    Dockerfile:

    FROM ruby:2.3.3
    RUN apt-get update -qq && apt-get install -y
    CMD ["echo", "Sup"]
    
    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              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
    
    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:

    FROM ruby:2.3.3
    RUN apt-get update -qq && apt-get install -y
    CMD ["echo", "Sup"]
    
    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              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
    
    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
    
    创建的存储库标记图像ID大小
    nick_应用程序最新bcf9b3667202 3秒前746.9 MB
    421662154c3f 10分钟前746.9 MB
    ruby 2.3.3 d00ebde6a601 2天前730.1 MB
    hello world最新c54a2cc56cbb 4个月前1.848 kB
    
    我所做的每个dockerfile更改都会在重建时创建一个新的
    none
    图像。它们是累积的,所以每次我进行更改和重建时,都会得到另一张
    none
    图像

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

    那些
    实际上是你的应用程序的旧版本,自从你将
    nick\u 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.
    

    毕竟,您正在创建图像的新版本,因此发生的事情是有意义的。您必须以某种方式对其进行包装,即使用一个bash脚本来调用,而不是直接调用
    docker build
    (在答案中显示命令)当我对文本文件进行更改时,它在技术上是文本文件的新版本,但文字处理器仍然可以在不创建中间文件的情况下处理新文本文件的更新。这似乎是Docker应用程序peeps的一个有用案例:如果我使用相同的标记重建,则假定它将是相同的图像,并删除所有中间版本/旧版本。感谢您提供的信息。不喜欢没有标志或选项自动执行此操作。这似乎是一个非常常见的用例。我有捷径
    docker rmi$(docker images-f“dangling=true”-q)
    ,但每次重建都要这样做似乎有点不雅观。dicker Imager rm
    docker rmi
    之间有什么区别吗?@CpILL这是docker,不是dicker lol。docker rmi要删除具有相同id但不同标签的图像。而docker image rm将删除docker image,这不在上述场景下。