Какая разница между командами и командами контейнера в разговорах по эластике

В aws говорить о еде.

Когда мы настраиваем расширения в .ebextensions

Интересно, в чем разница между commands и container_commands

Моя команда похожа на

container_commands:
  04_insert_app:
    command: "cat .ebextensions/insertapp_job.txt > /etc/cron.d/insertapp_job && chmod 644 /etc/cron.d/insertapp_job"
    leader_only: true

container_commands - это работа.

команды: имеет ошибку .ebextensions/insertapp_job.txt не найден

Ответы

Ответ 1

Основное различие между этими двумя частями заключается в том, что в процессе развертывания Elastic Beanstalk они запускаются.

Команда

Эти команды запускаются на ранней стадии процесса развертывания до того, как веб-сервер был настроен, и до того, как ваш код приложения был распакован:

Команды обрабатываются в алфавитном порядке по имени, и они запускаются до того, как приложение и веб-сервер настроены, и файл версии приложения извлечен. 1

По умолчанию команды выполняются в корневой домашней папке пользователя. Это и другие другие элементы поведения ЭБ можно изменить с помощью опций (рабочий каталог, продолжать ли при ошибке, переменные окружения для передачи командам и т.д.), Которые могут быть переданы вместе с командой.

Контейнерные команды

Эти команды запускаются позже в процессе развертывания после настройки веб-сервера и после того, как код приложения был распакован в промежуточную папку, но до того, как ваше приложение было "развернуто" (путем перемещения промежуточной папки к его окончательному месту):

Контейнерные команды запускаются после того, как приложение и веб-сервер были настроены, и архив версии приложения был извлечен, но до развертывания версии приложения. Неконтейнерные команды и другие операции настройки выполняются до извлечения исходного кода приложения. 2

По умолчанию эти команды запускаются в промежуточной папке, поэтому любые изменения, которые вы вносите в текущую папку, сохраняются после развертывания вашего приложения (путь изменится, поэтому будьте осторожны относительно относительных ссылок!).

Контейнерные команды поддерживают все те же параметры, что и команды (неконтейнерные), но также поддерживают опцию "leader_only":

Вы можете использовать leader_only только для запуска команды в одном экземпляре или для настройки теста только для запуска команды, когда команда теста оценивает значение true. Команды контейнера только для лидера выполняются только во время создания и развертывания среды, тогда как другие команды и операции настройки сервера выполняются каждый раз, когда экземпляр предоставляется или обновляется. 2

Ответ 2

В качестве дополнения к ответам @Tiro и @t10508hn я просто хочу пояснить, что на хост-компьютере выполняются как commands, так и container_commands.

Чтобы выполнить команды в контейнере докера, используйте Dockerfile.

Это была путаница, когда мне пришлось выполнить пару команд с помощью leader_only и предположил, что container_commands были фактически выполнены в контейнере.

Ответ 3

Я нашел свой ответ здесь aws offcial docs

commands: выполнить команды в экземпляре EC2

container_commands: выполнить команды для вашего контейнера