Я смущен, когда следует использовать CMD
против RUN
. Например, для выполнения команд bash/shell (например, ls -la
) я всегда использовал CMD
или есть ситуация, когда я буду использовать RUN
? Попытка понять лучшие практики этих двух подобных директив Dockerfile
.
Разница между RUN и CMD в Dockerfile
Ответ 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
Ответ 6
Команда RUN: команда RUN будет в основном выполнять команду по умолчанию, когда мы создаем изображение. Он также зафиксирует изменения изображения для следующего шага.
Может быть более 1 команды RUN, чтобы помочь в процессе создания нового изображения.
Команда CMD: команды CMD просто устанавливают команду по умолчанию для нового контейнера. Это не будет выполнено во время сборки.
Если файл докера имеет более 1 команды CMD, все они игнорируются, кроме последнего. Поскольку эта команда ничего не выполнит, а просто установит команду по умолчанию.