2015-07-30 6 views
3

У меня есть пример приложения django, который я пытаюсь запустить и запустить с помощью докеры.docker-compose - миграция базы данных и другие сценарии pre/post

docker-compose up поднимает сеть, db и другие контейнеры вместе со связями между ними. Но есть до и после сценариев, которые могут понадобиться для запуска ..

пример предварительных сценариев в моем сценарии:

git 
pip 
docker 
docker-compose 
wget 

например, пост-скриптов:

базы данных миграции, обычно выполняемые вручную с использованием docker run web... после запуска контейнеров.

В настоящее время у меня есть deploy.sh в корне приложения, которое следует логике, как это .. (я выбрал Ubuntu изображение при запуске)

#assuming I always choose ubuntu base image 
sudo apt-get install x 
sudo apt-get install y 
sudo apt-get install z 
docker-compose build .; docker-compose up -d; 
docker-compose run web "python manage.py makemigrations" 

Мои вопросы:

1), что является лучший способ запускать эти команды?

2) Проводятся ли миграции баз данных каждый раз при развертывании (с нуля?) - или эта проблема заботится об объемах?

ответ

2

У вас есть два варианта:

  1. Вы можете запустить эти команды в dockerfile для ваших изображений; поскольку каждый файл docker запускается при запуске compose - ваши изображения будут иметь результаты этих команд. Это особенно полезно, если вы выполняете модернизацию и настройку загрузки на уровне os (например, ваши команды apt-get).

  2. Для конфигурации уровня времени выполнения (вещи, которые необходимо выполнить после завершения системы) используйте директиву command в файле docker-compose.yml. Это будут ваши миграции (если вам нужно запускать их каждый раз).

Если вы хотите сохранить свои данные на разных этапах создания докеров (то есть ваши данные должны оставаться при перезагрузке контейнера); то вам нужно либо постоянное сопоставление с вашим хостом, либо общим томом данных, который вы также можете настроить в файле docker-compose.yml.

docker-compose будет с радостью запускать любой скрипт, который вы предоставляете, - он не знает, нужно ли ему запускать его, его просто исполняемые команды. Вы должны убедиться, что ваши сценарии pre, post, bootstrap достаточно интеллектуальны, чтобы их можно было повторить, даже если их эффективные результаты уже применены.

Смежные вопросы