Есть ли причина, по которой люди пишут все в DockerFile вместо отдельного сценария оболочки? - PullRequest
0 голосов
/ 05 января 2019

Мне почему-то не нравится синтаксис RUN x && y && z ..., который мы сейчас используем в DockerFile. Насколько я понимаю, я мог бы вместо этого запустить скрипт оболочки, например RUN xyz.sh, и выполнять те же задачи на своем любимом языке. Есть ли у последнего недостаток?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

RUN выполняет команды в новом слое и создает новое изображение. Это происходит, когда вы собираете образ с помощью Docker build.

CMD задает команду по умолчанию для параметров, запускаемых при запуске контейнера из образа.

В итоге. Выполнить и cmd не являются взаимозаменяемыми, RUN запускается при создании образа, CMD при запуске контейнера.

0 голосов
/ 05 января 2019

Обновление:

В дополнение к замечанию Дэвида о сложности, я полагаю, что запись всего в Dockerfile облегчает обмен (таким образом создавая уклон выживания для вас). А именно на DockerHub, чаще всего у вас есть вкладка «Dockerfile», чтобы быстро понять, как создается образ. Если автор использует COPY и RUN xyz.sh, ему / ей придется разместить скрипт в другом месте, или один только файл Docker теряет смысл.


CMD выполняется во время выполнения, то есть когда контейнер создается из образа. RUN - инструкция времени сборки. Таким образом, вопрос заключается в том, почему люди запускают вещи с RUN вместо CMD во время выполнения. (Вы можете, конечно, COPY script.sh /script.sh, затем RUN bash /script.sh)

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

  2. Во время сборки можно кэшировать RUN, поэтому в следующий раз сборка будет намного быстрее.

  3. Поскольку работает файловая система Docker, создание 10 контейнеров из одного образа занимает всего несколько больше места, чем создание 1 контейнера. Таким образом, вы можете сэкономить место на диске, установив пакеты в образ, а если вы установите их во время выполнения, все они будут занимать часть дискового пространства.

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