Ваш первый шаг - убедиться, что все работает в абсолютно чистой среде.Запустите ваше приложение локально, с абсолютно пустой базой данных.(Docker может быть хорошим способом для запуска базы данных; это сложный способ для разработки.) Ваше приложение должно иметь возможность запускаться и успешно запускаться в этой среде.
Возможно, вам придется написать миграцию иликод фиксации базы данных для загрузки начального набора данных.Поскольку вы говорите, что вам нужен один и тот же набор базовых данных во всех средах, имеет смысл включить это в дерево исходных текстов.
Теперь в Docker Land вам нужен скрипт, который при необходимости запустит миграцию и затем запуститсервер.Если вы используете Django, это может выглядеть примерно так:
#!/bin/sh
python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
В вашем Dockerfile COPY
этот скрипт добавляется в изображение и становится вашим CMD
.Типичный Dockerfile может выглядеть следующим образом:
FROM python:3.7
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . ./
CMD ["./run.sh"]
Теперь вы можете просто запустить этот образ в любой среде с правильной настройкой базы данных, и система миграции автоматически создаст базовые данные, если их еще нет.
С помощью этой настройки вы будете запускать точно такой же код в средах разработки, тестирования и производства.Не пытайтесь вставить свой локальный код приложения в контейнер режима разработки;с ним труднее работать, чем просто запускать код локально (возможно, в виртуальной среде Python), а также принципиально отличается от того, что вы будете использовать в рабочей среде.
Что является лучшим способом сохранитьПапка «Myproject» синхронизируется с папкой на моем хосте разработки.Если мне нужно использовать git.
Система управления исходным кодом довольно важна.Git очень популярен, но есть много других альтернатив, которые более эргономичны и препятствуют некоторым потенциально опасным путям.
Никогда не копируйте вокруг папки «myproject».Запустите docker build
, чтобы создать образ из файла Dockerfile, и docker push
в какой-нибудь реестр.Вы можете взглянуть на систему непрерывной интеграции (CI), которая может автоматически создавать и отправлять образ всякий раз, когда в репозиторий вносятся изменения.Если это only , что требуется для работы вашей CI-системы, то автоматические сборки Docker Hub будут работать, но вы также можете в общем случае настраивать вещи для запуска ваших тестов до того, как произойдет фактическая сборка, что требует чего-то по крайней мереlittle beefier.
(Исключением является случай, если у вас есть файлы, связанные с развертыванием, например файл docker-compose.yml
, где система контроля версий является лучшим способом их сохранения и распространения. В этомВ этом случае вам также может понадобиться проверить исходный репозиторий в производственной среде. Для таких файлов, как этот, просто scp
тоже может работать.)