首页
学习
活动
专区
工具
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:不移除镜像的过程镜像,默认移除

54710
  • Docker 学习手册

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

    1.9K40

    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

    636131

    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...默认情况下,如果存在关联,则所有关联的服务将会自动启动,除非这些服务已经在运行

    4.6K20

    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

    【实践】4.DOCKER之使用镜像

    摘要 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在镜像,Docker 会从镜像仓库下载镜像。...如果从 Docker Hub 下载镜像非常缓慢,可以参照 镜像加速器 一节配置加速器。 运行 有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。...除了 docker pull 可能导致这种情况,docker build 也同样可以导致这种现象。由于新旧镜像同名,旧镜像名称取消,从而出现仓库名、标签均为 的镜像。...filter 配合 -q 产生出指定范围的 ID 列表,然后送给另一个 docker 命令作为参数,从而针对这组实体成批的进行某种操作的做法 Docker 命令行使用过程中非常常见,不仅仅是镜像,将来我们会在各个命令中看到这类搭配以完成很强大的功能...之前讲过,容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此镜像如果被这个容器所依赖的,那么删除必然会导致故障。

    85420

    Docker系列教程04-Docker镜像常用命令

    我们首先来讨论Docker镜像的常用命令。 搜索镜像 可使用 docker search 命令搜索存放在Docker Hub的镜像。...示例1: docker search java 执行命令后,Docker就会在Docker Hub搜索含有“java”这个关键词的镜像仓库。...false 下载所有标签的镜像 --disable-content-trust true 忽略镜像的校验 示例1: docker pull java 执行命令后,Docker会从Docker Hub...--file,-f 指定Dockerfile的名称,默认是‘PATH/Dockerfile’ --force-rm false 删除中间容器 --iidfile 将镜像ID写到文件 --isolation...--network default 构建期间设置RUN指令的网络模式 --no-cache false 构建镜像过程不使用缓存 --pull false 总是尝试去更新镜像的新版本 --quiet,

    64560

    深入理解docker容器与镜像

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

    97120

    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命令可以将一个容器固化为一个新的镜像。

    46720

    3.Docker学习之Dockerfile

    DockerfileCMD用来为ENTRYPOINT指令提供参数,则CMD和ENTRYPOINT指令都应该使用exec格式 当基于镜像的容器运行时将会自动执行CMD指令, 并且如果在docker...shell处理而不是shell环境变量,并且将忽略任何的CMD或docker run运行命令行参数。... 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。...从 Docker 1.12 引入指令HEALTHCHECK 指令是告诉 Docker 应该如何进行判断容器的状态是否正常,从而比较真实的反应容器实际状态。..., 一个容器运行一个进程将多个应用解耦到不同容器(类似于微服务-K8s表现得淋漓精致) docker build -t test:v1.1 .

    1.7K20

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

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

    51830
    领券