Несколько способов выполнения команд в Dockerfile
Несколько способов выполнения команд в Dockerfile

Обзор

Dockerfile — это текстовый файл, используемый для создания образов Docker. Он предоставляет ряд инструкций и конфигураций сборки для автоматизации и стандартизации процесса сборки образов Docker. Dockerfile создает новый образ Docker, последовательно выполняя каждую строку команд. Таким образом, выполнение команд неотделимо от написания и сборки Dockerfiles.

В Dockerfile команды могут выполняться несколькими способами:

RUN Заказ: RUN Команда является наиболее распространенным способом разрешить создание Docker Выполнение произвольных команд во время зеркалирования. Например:

Язык кода:javascript
копировать
RUN apt-get update && apt-get install -y python

CMD Заказ: CMD Команда используется для указания команды по умолчанию, которая будет выполняться при запуске контейнера. это может быть в Dockerfile появляется только один раз и должна быть последней командой. Например:

Язык кода:javascript
копировать
CMD ["python", "app.py"]

команда ТОЧКА ВХОДА: команда ТОЧКА ВХОДАиспользуется для указанияконтейнер При запуск выполняется по умолчанию Заказ и не поддерживает перезапись. Например:

Язык кода:javascript
копировать
ENTRYPOINT ["python", "app.py"]

SHELL Заказ: SHELL Команда используется для указания RUN в команде ОБОЛОЧКА. по умолчанию SHELL да /bin/sh -c, но также может использоваться в Dockerfile Другие, указанные в ОБОЛОЧКА. Например:

Язык кода:javascript
копировать
SHELL ["/bin/bash", "-c"]

Следует отметить, что основная разница между этими Заказизсуществовать заключается в том, когда выполнять Заказ.RUN. Команда выполняется во время сборки, CMD и ENTRYPOINT Выполняется при запуске контейнера. ОБОЛОЧКА может быть использован в RUN Укажите больше в команде SHELL параметры. существовать Dockerfile Эти команды можно комбинировать для выполнения более сложных операций.

Команда RUN (запуск во время сборки)

Знакомство с командой RUN

RUN Заказда Dockerfile Команда, обычно используемая в , которая указывает на необходимость построения Docker Команда, выполняемая при зеркалировании.

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

Синтаксис команды ВЫПОЛНИТЬ:

  1. RUN ["command", "param1", "param2"]:используется для указаниябежатьиз Исполняемый файл и его необходимые параметры。
  2. RUN command1 && command2:используется длясуществовать Запуск нескольких в одной строке Заказ,Чтобы сохранить Docker зеркалоиз слоев.

Примечания и советы по использованию

один кусочек RUN Команда может отправить только один слой изображения, поэтому, чтобы минимизировать размер изображения, оно должно быть одного и того же слоя. RUN Заказказнен в нескольких заказах,ииспользоватьнемного хорошегоиз Создайте лучшие практики(Напримерудалитьненужныйизпакет программного обеспеченияи Временные файлы и т.д.)。

Обычно несколько Заказобъединитьиприезжатьодин кусочек RUN Выполнить по команде:

использовать && Подключить несколько заказов,использовать\ ветвь

использовать && Соединение нескольких Заказов позволяет объединить несколько Заказов в один. кусочек RUN Команды: если одна из команд не выполнена, последующие команды не будут выполнены. Например:

Язык кода:javascript
копировать
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y software-properties-common && \
    add-apt-repository ppa:deadsnakes/ppa && \
    apt-get install -y python3.6 && \
    apt-get clean

Команда CMD (запускается при запуске)

Введение в команды CMD

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

Инструкция CMD может появиться в файле Docker только один раз. Если существует несколько инструкций CMD, вступит в силу только последняя инструкция CMD.

CMD Существует два вида формы заказа, соответственно. exec формаи shell форма:

  1. форма исполнительного директора

Синтаксис инструкции CMD в форме EXEC следующий:

Язык кода:javascript
копировать
CMD ["executable","param1","param2"] # CMD ["python", "app.py"]

Среди них исполняемый Указывает, что изда запустит исполняемый файл или скрипт, param1, param2. Остальные параметры представляют собой параметры строки из Заказ программы, параметры можно опустить. Параметр команды даа JSON множество.

  1. SHELL форма

Синтаксис команды CMD в форме SHELL следующий:

Язык кода:javascript
копировать
CMD command param1 param2 # CMD python app.py

Среди них командование Указывает команду для запуска, параметр 1 и param2 является необязательным параметром командной строки.

Примечания и советы по использованию

Инструкция CMD может появиться в файле Docker только один раз. Если существует несколько инструкций CMD, вступит в силу только последняя инструкция CMD.

использовать SHELL формальный CMD Инструкции, Докер автоматически /bin/sh Начать через SHELL и бежать CMD Указанная команда обусловлена SHELL Обработка сигнала не поддерживается, можно использовать exec формальный CMD инструкция,Это может напрямую использовать механизм сигнализации.,И может добиться лучшей производительности и управления ресурсами.

команда ТОЧКА ВХОДА

ТОЧКА ВХОДА Введение

команда ТОЧКА ВХОДАдля установка по умолчанию изконтейнер исполнение Заказ, с CMD Заказы похожие, разные изда команда ТОЧКА Настройки ВХОДА из Заказа не перезаписываются, и да, поскольку контейнер по умолчанию Заказ всегда сохраняется.

команда ТОЧКА Существует два типа ВХОДАформа:exec формаи shell Форма, конкретный синтаксис следующий:

  1. использовать exec форма
Язык кода:javascript
копировать
ENTRYPOINT ["executable", "param1", "param2"]

в,executable дасуществоватьконтейнер При запустить Запуск исполняемого файла или скрипта,param1 и param2 Параметры исполняемого файла или сценария соответственно. Параметры можно опустить.

  1. использовать shell форма
Язык кода:javascript
копировать
ENTRYPOINT command param1 param2 
# ENTRYPOINT ["/bin/sh", "-c", "exec <exec_command>"]

в,command Представляет команду, которая будет запущена при запуске контейнера, в shell казнен в。param1 и param2 да command Параметры команды можно опустить.

Примечания и советы по использованию

команда ТОЧКА ВХОДА по умолчанию и CMD Значения команд по умолчанию могут существовать одновременно, а также комбинироваться друг с другом по желанию.

Их несколько, если команда ТОЧКА ВХОДА, действителен только последний заказ.

В то же время вы также можете использовать shell из exec команда для достижения команда ТОЧКА ВХОДАиз exec форма, например:

Язык кода:javascript
копировать
ENTRYPOINT ["/bin/sh", "-c", "exec <exec_command>"]

в,<exec_command> выражатьиспользоватьот Исполняемый файл Заказать.

Команда SHELL (запускается при сборке)

Введение в команду SHELL

SHELL команда используется в Dockerfile Указано в обкатке RUN Заказиз SHELL。SHELL Заказ Есть два видаформа:использовать SHELL Команда для изменения значения по умолчанию shell или в RUN Временные изменения в командах shell。

1.использовать SHELL Команда для изменения значения по умолчанию shell

Синтаксис команды SHELL:

Язык кода:javascript
копировать
SHELL ["executable", "parameters"] # SHELL ["/bin/bash", "-c"]

в,executable это значение по умолчанию SHELL Исполняемый файлпрограмма,parameters для установки SHELL Программа из параметров может быть опущена. существовать Dockerfile серединаиспользовать SHELL Команда для изменения значения по умолчанию shell может изменить весь Dockerfile Все в RUN

  1. существовать RUN Временные изменения в командах shell

существовать RUN Команду можно передать SHELL Меняйте, когда придет заказ shell。использовать SHELL Заказ может преобразовать среду сборки в shell Контекст меняется, чтобы указать из shell,исуществовать RUN Выполнить по команде SHELL Заказ.существовать RUN Заказсерединаиспользовать SHELL Заказать грамматику для:

Язык кода:javascript
копировать
RUN ["/bin/sh", "-c", "SHELL command"]
# RUN ["/bin/sh", "-c", "SHELL=/bin/bash apt-get update"]

в,command Некоторые выразили надежду, что существование будет временным shell казнен виз Заказ.

Язык кода:javascript
копировать
копироватькод
RUN ["/bin/sh", "-c", "SHELL=/bin/bash apt-get update"]

волясуществоватьвременныйиз bash shell казнен в apt-get update Заказ.

Примечания и советы по использованию

Необходимо обратить внимание на,RUN в команде SHELL Заказсуществовать RUN Он будет автоматически очищен после завершения команды RUN. Следующая строка будет использовать по умолчанию. shell контекст, и нет предыдущего из SHELL Переменные среды наследуются в указанном.

Короче говоря,ШЕЛЛ. команда изменить Dockerfile серединаиз shell контекст, который можно передать SHELL Команда для изменения значения по умолчанию shell или в RUN Временные изменения в командах Оболочку можно менять по-разному в зависимости от реальных потребностей. Dockerfile серединаиз shell контекст.

Подвести итог

Эта статья начинается с RUN Командование, CMD Заказ, команда ТОЧКА Четыре аспекта ВХОДА и SHELLЗаказ Dockerfile Представлен широко используемый заказ в из.

Среди них БЕГ команда используется в Docker зеркалоказнен в указать из Заказ и создать новый слой иззеркало, CMD Заказнодля установкисуществоватьконтейнер При запуск должен выполнить заказ по умолчанию и команду ТОЧКА ВХОДАнодля установкиконтейнер При По умолчанию при запускеиз используется «Заказ», и настройка «Из Заказ» не будет отменена. Кроме того, в этой статье объясняется, как существовать RUN Заказказнен в Несколько Заказ,какиспользовать SHELL Команда для изменения значения по умолчанию SHELL икаксуществовать RUN Временные изменения в командах SHELL изметод играмматика. Узнайте об этих часто используемых Dockerfile Команда может быть Docker Конструкция зеркала более эффективна и удобна.

имя команды

Время выполнения

описывать

RUN

время сборки

существовать Docker зеркалоказнен в Укажите из Заказ и создайте новый слой иззеркало.

SHELL

время сборки

существоватьконтейнер При запуск необходимо выполнить по умолчанию Заказ

CMD

При запуске

настраиватьконтейнер При при запуске по умолчанию установлено значение «Заказ», и настройка «Из Заказ» не будет отменена.

ENTRYPOINT

При запуске

существовать RUN Временные изменения в командах SHELL

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose