Команда docker build
создает неизменное изображение. Команда docker run
создает контейнер, который использует изображение в качестве базовой файловой системы, а другие метаданные из образа используются в качестве значений по умолчанию для запуска этого образа.
Каждая строка RUN
в Dockerfile используется для добавления слоя в файловую систему изображения в Docker. Docker фактически выполняет эту задачу во временном контейнере, отсюда и выбор сбивающего с толку термина «запустить». Из этой команды RUN
сохранилось только то, что изменения файловой системы, запущенные процессы, изменения переменных среды, параметры оболочки, такие как текущий рабочий каталог, теряются при очистке временного контейнера по завершении команды RUN
. .
Значения ENTRYPOINT
и CMD
используются для указания команды по умолчанию, запускаемой при запуске контейнера. Когда оба определены, в результате значение точки входа запускается со значением cmd, добавленным в качестве аргумента командной строки. Значение CMD
легко переопределяется в конце командной строки docker run
, поэтому, используя оба, вы можете легко перенастроить контейнеры, запускающие одну и ту же команду, с различными пользовательскими входными параметрами.
Если команду, которую вы пытаетесь выполнить, нужно выполнять при каждом запуске контейнера, а не сохранять в неизменяемом образе, то вам необходимо выполнить эту команду в ENTRYPOINT
или CMD
. Это увеличит время запуска контейнера, поэтому, если результат этой команды можно сохранить в виде изменения файловой системы и кэшировать для всех запускаемых контейнеров в будущем, этот параметр необходимо указать в строке RUN
.