我对docker
和containers
的世界是陌生的。我正在使用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
答案 0 :(得分:1)
Docker的基本映像是只读的,因此docker不会在每次运行时构建基本映像。
但是基本映像可能具有ONBUILD
指令,根据官方文档,其行为是:
作为处理FROM指令的一部分,下游构建器将查找ONBUILD触发器,并以与注册时相同的顺序执行它们。如果所有触发器都成功,则FROM指令完成,并且构建照常继续。