Тестирование докера на сервере разработки и его последующее развертывание и обновление с изменениями - PullRequest
1 голос
/ 13 марта 2019

У меня есть папка моего проекта "Myproject" с dockercompose.yml и папками для построения контекста Django_with_httpd и postgresql.

Внутри папки контекста сборки находится мой код приложения django.

Я использую COPY, чтобы поместить свой код в контейнер.

Также я поместил некоторые исходные данные в мою базу данных postgresql, которая находится в томе докера, созданном во время dockercompose.

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

До конечного производства:

Таким образом, при любом изменении в базе данных я хочу скопировать том обратно на сервер prodcution.

А также любые изменения, которые я делаю в «Myproject», я хочу скопировать всю папку в производство.

Так это как дела?

Каков наилучший способ синхронизации папки «Myproject» с папкой на моем хосте разработки. Должен ли я использовать Git.

1 Ответ

1 голос
/ 13 марта 2019

Ваш первый шаг - убедиться, что все работает в абсолютно чистой среде.Запустите ваше приложение локально, с абсолютно пустой базой данных.(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 тоже может работать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...