Разница между RUN и CMD в Dockerfile - программирование
Подтвердить что ты не робот

Разница между RUN и CMD в Dockerfile

Я смущен, когда следует использовать CMD против RUN. Например, для выполнения команд bash/shell (например, ls -la) я всегда использовал CMD или есть ситуация, когда я буду использовать RUN? Попытка понять лучшие практики этих двух подобных директив Dockerfile.

4b9b3361

Ответ 1

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

CMD - это команда, которую контейнер выполняет по умолчанию при запуске встроенного образа. Файл Dockerfile может содержать только один CMD. CMD можно переопределить при запуске контейнера с помощью docker run $image $other_command.

ENTRYPOINT также тесно связан с CMD и может изменить способ запуска контейнера изображения.

Ответ 2

RUN - запускает команды, пока мы создаем изображение докера.

CMD - запуск команд при запуске созданного образа докеры.

Ответ 3

Я нашел эту статью, очень полезную для понимания различий между ними:

RUN -   Инструкция RUN позволяет установить приложение и пакеты   для этого требуется. Он выполняет любые команды поверх текущего изображения   и создает новый слой, фиксируя результаты. Часто вы найдете   несколько инструкций RUN в файле Docker.

CMD -   Команда CMD позволяет вам установить команду по умолчанию, которая будет   выполняется только при запуске контейнера без указания команды.   Если контейнер Docker работает с командой, команда по умолчанию будет   игнорируются. Если Dockerfile имеет более одной инструкции CMD, все, кроме последнего   Инструкции CMD игнорируются.

Ответ 4

RUN - установите Python, теперь в вашем контейнере загорелся питон с его изображением
CMD - python hello.py, запустите свой любимый скрипт

Ответ 5

Примечание. Не путайте RUN с CMD. RUN фактически выполняет команду и фиксирует результат; CMD ничего не выполняет во время сборки, но указывает намеченную команду для изображения.

из ссылки файла docker

https://docs.docker.com/engine/reference/builder/#cmd

Ответ 6

Команда RUN: команда RUN будет в основном выполнять команду по умолчанию, когда мы создаем изображение. Он также зафиксирует изменения изображения для следующего шага.

Может быть более 1 команды RUN, чтобы помочь в процессе создания нового изображения.

Команда CMD: команды CMD просто устанавливают команду по умолчанию для нового контейнера. Это не будет выполнено во время сборки.

Если файл докера имеет более 1 команды CMD, все они игнорируются, кроме последнего. Поскольку эта команда ничего не выполнит, а просто установит команду по умолчанию.