Django in Docker - точка входа для запуска Django файлов приложения - PullRequest
0 голосов
/ 13 марта 2020

В данный момент я пытаюсь создать приложение Django, которое другие пользователи могут использовать как Docker -Container. Я хочу, чтобы они легко выполняли команду запуска или запускали заранее записанный docker -compose файл для запуска контейнера.

Теперь у меня проблемы с сохранением данных. Я использую флаг тома в docker, например, для привязки, монтирования локальной папки хоста в контейнер, где данные приложения и файлы конфигурации находятся на контейнере. Папка хоста пуста при первом запуске, так как пользователь только что установил docker и только начинает docker -композицию.

Поскольку это монтируемое подключение, пустая папка переопределяет папку в Docker, насколько я понял, и поэтому папка-контейнер, содержащая Django -App, теперь пуста и поэтому не является дисководе.

Я немного искал и, насколько я понял, мне нужно создать точку входа. sh Файл, который копирует папку данных приложения в папку контейнера после запуска, где находится том.

Теперь к моим вопросам:

  1. Есть ли передовой опыт копирования файлов через точку входа. sh file?
  2. Как насчет второго запуска, после того, как 1. работал и файлы уже существуют, как не переопределить возможно измененные файлы конфигурации с файлами по умолчанию в папке temp?

Мой пример код на данный момент:

Dockerfile

# pull official base image
FROM python:3.6

# set work directory
RUN mkdir /app
WORKDIR /app


# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# copy project
COPY . /app/

# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

#one of my tries to make data persistent
VOLUME /app

docker -compose.yml

version: '3.5'
services:
  app:
    image: app:latest
    ports:
      - '8000:8000'
    command: python manage.py runserver 0.0.0.0:8000
    deploy:
        replicas: 1
        restart_policy:
          condition: on-failure
    volumes:
        - /folder/to/app/data:/app
    networks:
      - overlay-core
networks:
    overlay-core:
      external: true

точка входа. sh

#empty for now

1 Ответ

0 голосов
/ 13 марта 2020

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

version: '3.5'
services:
  app:
    image: app:latest
    ports:
      - '8000:8000'
    volumes:
      - ./data:/app/data # not /app

Нет особой причины помещать объявление VOLUME в ваш файл Docker, но вы должен объявить CMD ваше изображение должно работать там.

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