Обновление:
В дополнение к замечанию Дэвида о сложности, я полагаю, что запись всего в Dockerfile облегчает обмен (таким образом создавая уклон выживания для вас). А именно на DockerHub, чаще всего у вас есть вкладка «Dockerfile», чтобы быстро понять, как создается образ. Если автор использует COPY
и RUN xyz.sh
, ему / ей придется разместить скрипт в другом месте, или один только файл Docker теряет смысл.
CMD
выполняется во время выполнения, то есть когда контейнер создается из образа. RUN
- инструкция времени сборки. Таким образом, вопрос заключается в том, почему люди запускают вещи с RUN
вместо CMD
во время выполнения. (Вы можете, конечно, COPY script.sh /script.sh
, затем RUN bash /script.sh
)
Если вы делаете такие вещи, как установка зависимостей, это может занять много времени, в случае масштабирования вашего сервиса, это сделает автоматическое масштабирование бесполезным, поскольку оно не может быть достаточно быстрым, чтобы поглотить пиковые значения.
Во время сборки можно кэшировать RUN
, поэтому в следующий раз сборка будет намного быстрее.
Поскольку работает файловая система Docker, создание 10 контейнеров из одного образа занимает всего несколько больше места, чем создание 1 контейнера. Таким образом, вы можете сэкономить место на диске, установив пакеты в образ, а если вы установите их во время выполнения, все они будут занимать часть дискового пространства.