首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么docker build在中间容器中运行一个命令,然后该命令被移除,从而导致该命令被忽略?

Docker是一种轻量级的容器化技术,通过使用Docker可以将应用程序及其依赖项打包成一个独立的容器,实现跨平台、快速部署和可移植性。在使用Docker构建镜像时,可以通过Dockerfile文件定义构建过程,其中的每个指令都会在一个中间容器中执行。

当使用Dockerfile中的RUN指令运行一个命令时,Docker会创建一个临时的中间容器,并在该容器中执行该命令。执行完毕后,Docker会将中间容器的状态保存为一个新的镜像层,并将该层作为下一步构建的基础。然而,由于Docker的设计理念是构建不可变的镜像,因此中间容器在执行完命令后会被自动移除,只保留命令的结果。

这种设计有以下几个优势:

  1. 减小镜像大小:中间容器被移除后,不会保留任何多余的文件或状态,从而减小了最终镜像的大小。
  2. 提高构建速度:由于中间容器的移除,构建过程中不会产生额外的镜像层,从而加快了构建速度。
  3. 避免构建过程中的干扰:中间容器的移除可以确保每个构建步骤都在一个干净的环境中执行,避免了前一步骤对后续步骤的影响。

然而,这也意味着在构建过程中运行的命令不会对最终镜像产生持久化的影响。如果需要在最终镜像中保留某个命令的效果,可以通过其他方式实现,例如在Dockerfile中使用COPY指令将命令的结果复制到最终镜像中。

总结起来,Docker在构建过程中使用中间容器执行命令并移除中间容器的设计,旨在减小镜像大小、提高构建速度和避免构建过程中的干扰。这种设计使得Docker成为一种高效、可靠的容器化解决方案。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):提供高度可扩展的容器管理服务,支持快速部署、自动伸缩和高可用性。详情请参考:https://cloud.tencent.com/product/tke
  • 腾讯云云服务器(CVM):提供弹性计算能力,可快速创建和管理云服务器实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(Cloud Object Storage,COS):提供安全、稳定、低成本的对象存储服务,适用于海量数据存储和访问。详情请参考:https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Docker 应用实践-镜像篇

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。 首先,需要先从镜像仓库服务中拉取镜像。...常见的镜像仓库服务是 Docker Hub,但是也存在其他镜像仓库服务; 然后,拉取操作会将镜像下载到本地 Docker 主机,可以使用该镜像启动一个或者多个容器。...如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从可写层下的只读层复制到可写层,该文件的只读版本仍然存在,只是已经被可写层中该文件的副本所隐藏。...镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构, 镜像分层结构特点/注意事项: 基础镜像层被共享的,一般基础镜像层都是根据构建镜像的环境来生成的...# 语法 $ docker rmi [OPTIONS] IMAGE [IMAGE...] OPTIONS 说明: -f:强制删除; –no-prune:不移除该镜像的过程镜像,默认移除。

55910
  • Docker 学习手册

    容器:Container,容器和镜像的区别就是在镜像的外面多了一层可读写的 layer。但容器未必是要在运行状态的。 基本命令有哪些?...前者可以被 block,后者强制。 rm 和 rmi: 前者移除容器的可读写层,只能针对非运行状态的容器。 后者可以移除镜像的只读层,但只能移除最顶层镜像,用 -f 可以移除中间层。...CMD 就一条,就算写了多条,前面的 CMD 都会被忽略,而且在 docker run 的启动命令后加上命令,Dockerfile 里的这一句会被忽略。...ARG[=]:设置环境变量名,可以在 docker run 命令中通过 --build-arg 来传进去。...EXPOSE: 运行容器时,暴露出来的端口,但其实 EXPOSE 只是一个容器端口的声明,真正映射出去的,是在运行 docker 的时候 -p :容器端口> 开的。

    2K40

    Docker 总结 ubuntu

    DEST_PATH存在并且是一个文件 目标被源文件的内容覆盖 DEST_PATH存在并且是一个目录 使用来自的基本名称将文件复制到此目录中 SRC_PATH SRC_PATH指定目录 DEST_PATH...不存在 DEST_PATH被创建为一个目录,并且源目录的内容被复制到这个目录中 DEST_PATH存在并且是一个文件 错误情况:无法将目录复制到文件 DEST_PATH存在并且是一个目录 SRC_PATH...通过 [docker commit] 命令来提交一个基于当前容器状态的新镜像 使用 [docker export] 命令来将容器导出到系统文件并压缩成 tar,之后可以根据该 tar 文件使用 docker...# 移除数据卷 数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。...如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

    2.2K30

    【云原生 | Docker篇】轻松学会生存技巧 -- 命令(二)

    / 命令 作用 attach 绑定到运行中容器的标准输入,输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx..) build...push 给registry推送一个image或者repository rename 重命名一个容器 restart 重启一个或者多个容器 rm 移除一个或者多个容器 rmi 移除一个或者多个镜像 run...,需要知道之前的启动命令 (docker ps --no-trunc),然后再用下面启动。...是根据一个Dockerfile构建出镜像 commit 是正在运行中的容器提交成一个镜像 容器的状态 Created(新建)、Up(运行中)、Pause(暂停)、Exited(退出) docker...但是不考虑在Docker守护进程启动时就已经停止了的容器 2、docker exec 在运行的容器中执行命令 语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG

    644131

    Docker Compose 命令详解

    restart 重启项目中的服务 rm 删除所有停止状态的服务容器 run 在指定服务上运行一个命令 scale 设置指定服务运行的容器个数 stop 停止处于运行状态的容器 start 启动被stop...服务容器一旦构建后,将会带上一个标记名,例如对于web项目中的一个db容器,可能是web_db。 可以随时在项目目录下运行docker-compose build 来重新构建服务。...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。...选项: -f:不要求确认移除; -s:在删除前停止项目中的所有容器; -v:删除任何附加到容器的匿名卷; run 在指定服务上运行一个命令 格式为: [root@centos01 ~]# docker-compose...默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。

    5K20

    docker-compose

    服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。 可随时在项目目录下运行 docker-compose build 来重新构建服务。...down 此命令将会停止 up 命令所启动的容器,并移除网络 exec 进入指定的容器。 images 列出 Compose 文件中包含的镜像。...在指定服务上执行一个命令。...默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。 该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。

    3K43

    Docker重学系列之Dockerfile

    使用 Dockerfile 构建镜像时最好是将 Dockerfile 放置在一个新建的空目录下。然后将构建镜像所需要的文件添加到该目录中。...指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 ---- FROM 命令 基于哪个镜像进行构建新的镜像,在构建时会自动从docker hub拉取...这就是对 Dockerfile 构建分层存储的概念不了解所导致的错误。 之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。...下面解释一下什么是匿名卷 具名挂载和匿名挂载 ---- CMD 命令 — 容器启动命令 首先思考一个问题,为什么我们下载一个tomcat镜像后,通过docker run 命令就可以直接运行一个tomcat...服务在容器中的ip,这里我们改为容器名 使用容器名连接的前提时,两个容器运行在同一个自定义网桥里面才可以 将两个容器放入一个自定义网络中 创建自定义网络 docker network create

    1.9K30

    深入理解docker容器与镜像

    下面这张图片展示了一个运行中的容器(灰色区域为该容器 运行的进程 )。图片一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。...图片一个容器的元数据好像是被分成了很多文件,但或多或少能够在/var/lib/docker/containers/目录下找到,就是一个可读层的id。...docker stop 图片docker stop命令会向 运行中的容器 发送一个SIGTERM的信号,然后停止所有的进程。...docker rm 图片删除一个或多个容器docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。...在循环中的每一步都会生成一个新的层,因此许多新的层会被创建。docker exec 图片docker exec 命令会在运行中的容器执行一个新进程。

    1K20

    Docker学习笔记(2)

    1.docker build 用于使用Dockerfile文件创建镜像,是一个比较常用和重要的命令,关于Dockerfile文件如何定制化,后续会写一篇文专门讲。...images -a images 3.docker rmi docker rmi命令用于删除镜像,删除镜像时,如果已有基于该镜像启动的容器存在,则无法直接删除,需要先用rm命令删除容器。...这两个子命令都提供 -f 选项,可强制删除存在容器的镜像或启动中的容器。 docker rmi [OPTIONS] IMAGE [IMAGE...]...-f:强制删除 --no-prune:不移除该镜像的过程镜像,默认移除 示例 删除ubuntu:16.04镜像: [root@localhost ~]# docker rmi ubuntu:16.04...days ago109MB load 6.docker commit docker commit命令可以将一个容器固化为一个新的镜像。

    47120

    Docker 镜像

    除了 docker pull 可能导致这种情况,docker build 也同样可以导致这种现象。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。...--filter 配合 -q 产生出指定范围的 ID 列表,然后送给另一个 docker 命令作为参数,从而针对这组实体成批的进行某种操作的做法在 Docker 命令行使用过程中非常常见,不仅仅是镜像...于是有了一个 Docker 引擎参数 –icc=false,当指定该参数后,容器间将默认无法互访,除非互相间使用了 –links 参数的容器才可以互通,并且只有镜像中 EXPOSE 所声明的端口才可以被访问...这就是对 Dockerfile 构建分层存储的概念不了解所导致的错误。 之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。...在 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。

    6.4K10

    Docker入门(八):三剑客之Docker Composes使用

    可以随时在项目目录下运行 docker-compose build 来重新构建服务。...--services: 打印服务名,一行一个验证和查看compose文件配置。3. down作用:此命令将会停止 up 命令所启动的容器,并移除网络。...默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。选项:-d后台运行,输出容器名。--name NAME 为容器指定一个名字。...链接的服务都将会被自动启动,除非已经处于运行状态。可以说,大部分时候都可以直接通过该命令来启动一个项目。...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate 。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。

    56030

    Docker Compose 安装及使用教程

    项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。...服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。 可以随时在项目目录下运行 docker-compose build 来重新构建服务。...down 此命令将会停止 up 命令所启动的容器,并移除网络 exec 进入指定的容器。 help 获得一个命令的帮助。 images 列出 Compose 文件中包含的镜像。...默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。 该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。

    11.1K11

    Dockerfile的一些用法和最佳实践记录

    每个FROM指令可以使用不同的基础镜像,并且开始一个新的构建阶段。每个阶段是完全独立的,可以被认为是一个临时的中间镜像。...以下是一个使用多阶段构建的例子,它首先使用golang镜像来编译Go应用程序,然后在新的阶段使用基于alpine的较小镜像来运行该应用程序: # Stage 1: Build the Go binary...CMD和ENTRYPOINT有什么区别 CMD 设置默认的被容器执行的命令,并且可以有参数。如果 Docker 运行时(也就是docker run命令)指定了其他命令,CMD 命令会被忽略。...ENTRYPOINT 配置容器启动时运行的命令,让容器以应用程序或服务的形式运行。...不同于 CMD,它不会被 docker run 的命令行参数覆盖 也正是这个原因,一般来说,推荐使用ENTRYPOINT, 把所有需要的执行的命令都写进一个脚本,这样可以减少上线过程中的由于传参导致的问题

    23610
    领券