每次运行“子”容器时,Docker是否会构建基础映像?

时间:2019-05-17 05:13:34

标签: docker docker-compose dockerfile docker-for-windows

我对dockercontainers的世界是陌生的。我正在使用Microsoft servercore作为base image,并且需要安装一个应用程序,然后将其复制并安装在image上,然后复制其他文件。然后,我构建此图像并将其用作base image的另一个可以处理这些文件的容器。

但是,第二个container需要花很长时间才能开始工作,这使我想知道Docker容器是否每次运行都从头开始构建其基本映像。

如果是这种情况,那么我可以构建随需安装的基本映像,因此不是每次都执行基本映像构建的所有步骤(复制文件,安装等)。它被“子”容器消耗了吗?

如果不是这种情况,那么为什么有一个原因导致子容器延迟启动? 也许可以通过某种方式检查容器正在执行哪个步骤?

更新-我以粗略的方式进行了检查,方法是删除要复制到基本映像中的文件之一,并检查它是否会产生问题,但事实并非如此。基本映像容器可能不会在每次被子容器使用时都被构建,但是第一步是从Docker Run到执行简单批处理之间的时间相当长...

更新2 -为了更加清晰...

DockerFile 1 (作为testdocker构建)

FROM mcr.microsoft.com/windows/servercore  
ADD 7z1900-x64.exe /7z1900-x64.exe  
RUN powershell.exe -Command Start-Process .\7z1900-x64.exe -ArgumentList '/S /D=c:/' -Wait

Dockerfile 2

FROM testdocker
COPY testbat.bat /testbat.bat
CMD testbat.bat && cmd

在第二个容器中执行的批处理文件

@ECHO ON
dir
pause

1 个答案:

答案 0 :(得分:1)

Docker的基本映像是只读的,因此docker不会在每次运行时构建基本映像。

但是基本映像可能具有ONBUILD指令,根据官方文档,其行为是:

  

作为处理FROM指令的一部分,下游构建器将查找ONBUILD触发器,并以与注册时相同的顺序执行它们。如果所有触发器都成功,则FROM指令完成,并且构建照常继续。