Рубрики
Uncategorized

Development Django с использованием Docker в качестве хоста — часть 1: DockerFile

Django Django — это веб-каркас Python высокого уровня, которая поощряет быстрое развитие и … Помечено Django, Docker, DevOps, Devjournal.

Django

Django — это веб-каркас высокого уровня Python, которая поощряет быстрое развитие и чистый, прагматичный дизайн. Построенные опытными разработчиками, оно заботится о большем количестве хлопот веб-разработки, поэтому вы можете сосредоточиться на написании вашего приложения, не требуя восстановления колеса.

Докер

Docker — это набор платформа как услуга Продукты, которые используют виртуализацию уровня ОС для обеспечения программного обеспечения в пакетах, называемых контейнерами.

Недавно, в последнее время разработка проекта Django я столкнулся с несколькими проблемами, устанавливающими системные зависимости (MySQLClient и т. Д.), чтобы установить необходимый пакет для работы моего приложения Django в местной среде разработки.

Это всегда хлопот, устанавливая системные зависимости в машине разработки, когда

  • Хост отформатирован
  • Вы меняете машину разработки
  • Изменение операционной системы (скажем, Windows в Linux)
  • Обновление операционной системы ( Удаляет поддержку более ранней версии библиотек, всегда приходит с новой версией библиотек, которые могут не иметь поддержки для приложения )

И снова вы начинаете гонку с настройкой системы, убивая много времени.

Хотя мы используем Dockerfile Для создания продуктивных изображений для запуска по производству сервера, почему бы не использовать то же самое, что и хост и удалите системные зависимости со всеми этапами разработки?

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

Ток

  1. Создать Dockerfile
  2. Добавьте пользователя Non-root
  3. Установите зависимости выполнения
  4. Скопируйте файлы в контейнер
  5. Установите зависимости Python
  6. Добавить ТОЧКА ВХОДА

Давайте прыгнем

Если вы еще не установили Докер и Docker-Compose На вашей машине сначала установите оба, следуя официальному руководству.

1. Создать dockerfile

Нам нужно сначала создать Dockerfile В каталоге проекта, где мы будем создавать проект Django. Чтобы увеличить размер изображения ниже, мы будем использовать последнюю версию Slim Python Image Python: 3.9.1-Slim Отказ Добавьте следующее на первую строку DockerFile

FROM python:3.9.1-slim

2. Добавьте пользователя Non-root

Всегда рекомендуется создавать пользователь Non-root вместо использования пользователя root в DockerFile. Итак, давайте создадим пользователь по имени проекта (MyApp).

ARG APP_USER=myapp
RUN groupadd -r ${APP_USER} && useradd --no-log-init -r -m -g ${APP_USER} ${APP_USER}

Arg создает переменную аргумента, чтобы значение MyApp Может быть на ссылке с использованием переменной на протяжении всей DockerFile. Следующая команда добавляет группу и создает пользователя с MyApp создает домашний каталог /home/myApp Для пользователя и назначает разрешение на домашний каталог.

3. Установите зависимости выполнения

С Django мы собираемся использовать последнюю версию MySQL, поэтому давайте добавим необходимые системные зависимости в DockerFile. Кроме того, мы будем очистить список APT Linux, так как он больше не требуется.

# default-libmysqlclient-dev -- Required for mysql database support
RUN set -ex \
    # Runtime dependencies
    && RUN_DEPS=" \
    default-libmysqlclient-dev \
    " \
    && seq 1 8 | xargs -I{} mkdir -p /usr/share/man/man{} \
    && apt-get update && apt-get install -y --no-install-recommends $RUN_DEPS \
    # Remove package list
    && rm -rf /var/lib/apt/lists/* \
    && mkdir /static_my_project

Что вышеуказана команда

  • Устанавливает mysqlclient Системная зависимость
  • Удаляет списки APT

4. Скопируйте файлы в контейнер

Теперь измените рабочий каталог на /приложение/ каталог

WORKDIR /app/

Давайте скопируем требования .txt Файл для рассрочки зависимости. ( Мы создадим его на дальнейших шагах )

ADD requirements.txt /requirements.txt

Давайте скопируем исходный код приложения и скрипты в контейнер

COPY ./src /app/
COPY scripts/ /scripts/

5. Установите зависимости Python

Теперь мы установим необходимые зависимости от требования .txt файл

RUN set -ex \
    # Define build dependencies, they will be removed after build completes and libraries has been installed
    && BUILD_DEPS=" \
    build-essential \
    " \
    && apt-get update && apt-get install -y --no-install-recommends $BUILD_DEPS \
    && pip install -r /requirements.txt  \
    && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $BUILD_DEPS \
    && rm -rf /var/lib/apt/lists/*

Вышеуказанная команда делает следующее

  • Установка зависимостей сборки
  • Устанавливает зависимости Python
  • Удаляет зависимости сборки
  • Удаляет списки репозитория

Теперь нам нужно разоблачить порт 8000 Чтобы получить доступ к запуску сервера

EXPOSE 8000

6. Добавить въездную точку

Давайте добавим Выходная точка который позволяет запустить команды management.py без запуска сервера напрямую. Мы запустим сервер, выполнив команду на изображении. ( Я лично использую этот паттерн, потому что он дает вам гибкость для непосредственного запуска Django Shell без запуска сервера ).

ENTRYPOINT ["/scripts/docker/entrypoint.sh"]

Вот и это для Dockerfile Отказ Вот окончательный контент

FROM python:3.9.1-slim

ARG APP_USER=myapp
RUN groupadd -r ${APP_USER} && useradd --no-log-init -r -m -g ${APP_USER} ${APP_USER}

# default-libmysqlclient-dev -- Required for mysql database support
RUN set -ex \
    # Runtime dependencies
    && RUN_DEPS=" \
    default-libmysqlclient-dev \
    " \
    && seq 1 8 | xargs -I{} mkdir -p /usr/share/man/man{} \
    && apt-get update && apt-get install -y --no-install-recommends $RUN_DEPS \
    # Remove package list
    && rm -rf /var/lib/apt/lists/* \
    && mkdir /static_my_project

WORKDIR /app/

ADD requirements.txt /requirements.txt
COPY ./src /app/
COPY scripts/ /scripts/

# build-essential -- Required to build python mysqlclient library. https://packages.debian.org/sid/build-essential
RUN set -ex \
    # Define build dependencies, they will be removed after build completes and libraries has been installed
    && BUILD_DEPS=" \
    build-essential \
    " \
    && apt-get update && apt-get install -y --no-install-recommends $BUILD_DEPS \
    && pip install -r /requirements.txt  \
    && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $BUILD_DEPS \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["/scripts/docker/entrypoint.sh"]

Оригинал: «https://dev.to/anujdev/django-development-using-docker-as-host-part-1-dockerfile-3bnc»