Создает ли Docker базовый образ при каждом запуске «дочернего» контейнера? - PullRequest
0 голосов
/ 17 мая 2019

Я новичок в docker и мире containers .. Я использую Microsoft servercore в качестве моего base image, и мне нужно приложение, установленное на нем, которое я копирую и устанавливаю на image, и скопируйте некоторые другие файлы помимо. Затем я создаю этот образ и использую его как base image для другого контейнера, который работает с этими файлами.

Однако секунде container требуется много времени, чтобы начать выполнять свою работу, что заставило меня задуматься о том, создают ли контейнеры Docker свои базовые образы с нуля при каждом запуске.

Если это так, то могу ли я создать базовый образ, который устанавливается вместе со всем, что мне нужно, поэтому все этапы построения базового образа (копирование файлов, установка и т. Д.) Не выполняются каждый раз он потребляется "дочерним" контейнером?

Если это не так, есть ли причина, по которой дочерний контейнер должен запускаться так поздно? Какой-нибудь способ проверить, какой шаг выполняется контейнером, возможно?

ОБНОВЛЕНИЕ - Я сделал грубую проверку, удалив один из файлов, скопированных в базовое изображение, и проверив, не создаст ли он проблемы, но это не так, вполне вероятно. контейнер базового образа создается не каждый раз, когда он используется дочерним контейнером, но время, затрачиваемое между Docker Run и выполнением простого пакета, поскольку первый шаг достаточно велик ...

ОБНОВЛЕНИЕ 2 - Для большей ясности ...

DockerFile 1 (создается как тестдокер)

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 Ответ

1 голос
/ 17 мая 2019

Базовое изображение предназначено только для чтения для Docker, поэтому Docker не будет создавать базовое изображение при каждом запуске.

Но базовое изображение может содержать инструкцию ONBUILD, из официального документа его поведение:

В процессе обработки инструкции FROM нисходящий компоновщик ищет триггеры ONBUILD и выполняет их в том же порядке, в котором они были зарегистрированы.Если все триггеры выполнены успешно, инструкция FROM завершается, и сборка продолжается как обычно.

...