Можно ли определить эти задачи с помощью docker-compose?
Нет;файл docker-compose.yml
определяет только долго работающие "сервисные" контейнеры.Нет способа определить дополнительную задачу типа docker exec
, которую вы запускаете в уже запущенном контейнере.В принципе, вы можете определить дополнительные «сервисы», которые выполняют свою единицу работы и сразу же завершают работу, но каждый раз, когда вы запускаете docker-compose up
, он захочет перезапустить все из них.
инициализация данныхtask
Если у вас есть что-то, что нужно запустить при первом запуске (например, предварительная загрузка данных) или при каждом запуске (возможно, при переносе базы данных), вы можете структурировать свой контейнер так, чтобы он выполнялся до запуска основного приложения.Я склонен делать подобные вещи в скрипте точки входа;он принимает команду контейнера в качестве аргументов командной строки, поэтому у него есть возможность принять решение на основе того, какая команда выполняется, выполнить необходимую настройку, а затем фактически запустить команду.
#!/bin/sh
if [ "$1" = "theapp" ]; then
# Hypothetically: if we're starting theapp, run its migrations
# first before running the service itself
theapp migrate
fi
# Now do whatever the command is
exec "$@"
Aпримером этого шаблона является точка входа образа mysql : если он запускает базу данных, а каталог данных еще не существует, то он выполняет все первоначальные настройки, запуская временный сервер базы данных.пока он делает это.
дополнительные [...] задачи, которые я хотел бы выполнить
Вы можете посмотреть, можете ли вы добавлять сетевые вызовы, которые их инициируют, либопо защищенному URL-адресу «admin» или по отдельному порту, который не публикуется извне.Это позволило бы избежать проблемы, связанной с необходимостью получить корневую оболочку для выполнения рутинных задач обслуживания.
В противном случае сценарий оболочки для автоматизации задачи и ее аргументов по крайней мере спасет вас от необходимости ввода и запоминания.