Docker для автоматического обновления разработки django - PullRequest
0 голосов
/ 07 ноября 2019

Используемое программное обеспечение:

  • Django 2.2.7
  • Docker 19.03.4 сообщество
  • OS = Ubuntu 18.04

Iпроисходят из прошлого vagrant, где я ранее создал среду, в которой у меня есть виртуальный аналог, но внутри виртуальной машины. Так сказать;Я загрузил бродячую машину и, используя инициализацию, установил все необходимые пакеты и требования. Затем на моей хост-машине я установил Eclipse и разместил проект django. Последним шагом для меня было связать их вместе, используя общие ресурсы. Таким образом, я всегда получал обновленный код.

Для тех, кто незнаком с Джанго;команда runserver по умолчанию настроена на прослушивание изменений кода и «перезапускает» (не совсем) при каждом изменении, немедленно отражающем изменение в браузере.

Внутри виртуальной машины я бы затем запустил «runserver»команда и, следовательно, возможность развиваться таким образом.

Теперь, используя Docker (я должен связать некоторое программное обеспечение вместе и в конечном итоге развернуть с помощью Docker) Я пытаюсь несколько повторить эту ситуацию. Я запустил и запустил свой докер django, используя простой Dockerfile, основанный на python-3.7.5-stretch. Контейнер работает нормально, как и сам django, однако код теперь встроен (из-за отсутствия лучшего слова). Это, конечно, из-за моей команды копирования внутри файла:

FROM python:3.7.5-stretch

ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt

RUN mkdir /app
WORKDIR /app

ADD . /app/

ENV PYTHONUNBUFFERED 1
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive

# install environment dependencies
RUN pip3 install --upgrade pip

EXPOSE 8000
EXPOSE 8280

CMD ["python", "manage.py", "makemigrations"]
CMD ["python", "manage.py", "migrate"]
CMD ["python", "/app/manage.py", "runserver", "0.0.0.0:8000"]

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

Я знаю об объемах, но кажется, что они смонтированы на уровне контейнера, а не на уровне его изображения. Фактически это будет означать, что все команды будут выполняться после инициализации вручную. Контейнер будет остановлен раньше этого времени.

Короче говоря: Что я могу сделать, чтобы эмулировать похожую на бродячую ситуацию, когда контейнер будет автоматически читать (или отправлять) контейнер, если это вообще возможно?

TLDR: Мне нужна ситуация, когда я могу обновлять код django в режиме реального времени без непрерывной перестройки образа. Есть варианты?

1 Ответ

1 голос
/ 07 ноября 2019

Моя ссылка в комментарии неверна. Я хотел связать этот ответ . Данное решение может быть немного проще, чем у вас с томами.

Если у вас есть изображение и вы запустите его примерно следующей командой:

$ docker run --rm -it <image_name>

Используя опцию --mount, вы можетеСмонтируйте текущий каталог в папку /app вашего контейнера следующим образом:

$ docker run --rm -it --mount src="$(pwd)",target=/app,type=bind <image_name>

Изменения файлов теперь должны перезапустить сервер Django в контейнере.

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