Разница между Docker Build и Docker Run - PullRequest
0 голосов
/ 01 мая 2018

Если я хочу запустить скрипт python в моем контейнере, какой смысл иметь команду RUN, если я могу передать аргумент при сборке вместе с запуском скрипта?

Каждый раз, когда я запускаю контейнер, я хочу, чтобы x.py запускался на переменной ENV, переданной на этапе сборки.

Если бы я использовал Swarm, и единственная цель состояла в том, чтобы запустить скрипт x.py, Swarm будет только строить узлы, а не строить и в конечном итоге запускать, поскольку инструкции CMD и ENTRYPOINT выполняются только в время выполнения.

Я что-то упустил?

1 Ответ

0 голосов
/ 01 мая 2018

Команда docker build создает неизменное изображение. Команда docker run создает контейнер, который использует изображение в качестве базовой файловой системы, а другие метаданные из образа используются в качестве значений по умолчанию для запуска этого образа.

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

Значения ENTRYPOINT и CMD используются для указания команды по умолчанию, запускаемой при запуске контейнера. Когда оба определены, в результате значение точки входа запускается со значением cmd, добавленным в качестве аргумента командной строки. Значение CMD легко переопределяется в конце командной строки docker run, поэтому, используя оба, вы можете легко перенастроить контейнеры, запускающие одну и ту же команду, с различными пользовательскими входными параметрами.

Если команду, которую вы пытаетесь выполнить, нужно выполнять при каждом запуске контейнера, а не сохранять в неизменяемом образе, то вам необходимо выполнить эту команду в ENTRYPOINT или CMD. Это увеличит время запуска контейнера, поэтому, если результат этой команды можно сохранить в виде изменения файловой системы и кэшировать для всех запускаемых контейнеров в будущем, этот параметр необходимо указать в строке RUN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...