Несколько способов выполнения команд в 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.