За основу возьмем проект из модуля 10 "Инфраструктура кэширования в Django" данного курса, исходный код вы можете взять на GitHub - https://github.com/Permin0ff/htmx_books_cached
На данном этапе мы поменяем кеширование данного проекта, для этого в settings.py изменим метод кэширования на стандартный метод кэширования в Django:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
}
}
Примечание: Кеширование с использованием Memcached в Docker мы добавим чуть позже.
Создание Dockerfile
Начнем с Dockerfile - это текстовый файл, который содержит инструкции о том, как будет создан docker-образ.
В Dockerfile используются нижеследующие директивы:
FROM: Директива устанавливает базовый образ, из которого будет построен контейнер Docker.
WORKDIR: Директива устанавливает рабочий каталог в созданном образе.
RUN: Директива выполняет команды в контейнере.
COPY: Директива копирует файлы из файловой системы в контейнер.
CMD: Директива устанавливает исполняемые команды в контейнере.
В корневом каталоге проекта создайте файл с именем Dockerfile без расширения файла:
Добавим в этот файл следующие команды:
# pull the official base image
FROM python:3.12.0-alpine
# set work directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app
RUN pip install -r requirements.txt
# copy project
COPY . /usr/src/app
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Разберем содержимое этого файла подробнее:
FROM python:3.12.0-alpine: Устанавливает базовый образ, из которого будет создан контейнер Docker.
WORKDIR /usr/src/app: Устанавливает рабочий каталог внутри контейнера в/usr/src/app.
ENV PYTHONDONTWRITEBYTECODE 1: Не позволяет Python копировать файлы.pycв контейнер.
ENV PYTHONUNBUFFERED 1: Гарантирует, что вывод Python регистрируется в терминале, что позволяет отслеживать журналы Django в режиме реального времени.
RUN pip install --upgrade pip: Устанавливает и обновляет версию pip, которая находится в контейнере.
COPY ./requirements.txt /usr/src/app: Копируетrequirements.txtфайл в рабочий каталог в контейнере.
RUN pip install -r requirements.txt: Устанавливает все необходимые модули проекта для запуска в контейнере.
COPY . /usr/src/app: Копирует весь исходный код проекта в рабочий каталог в контейнере.
EXPOSE 8000: Предоставляет порт8000для доступа из других приложений.
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]: Устанавливает исполняемые команды в контейнере.
Создание образа Docker
Чтобы создать образ Docker из файла Dockerfile, который мы создали выше, выполните следующую команду:
docker build --tag django_books:latest .
--tagУстанавливает тег для образа. Например, мы создаем образ Docker изpython:3.12.0у него есть тегalpine.
В нашем образе Docker,latestэто тег.
- Точка
.указывает на то, чтоDockerfileнаходится в текущем рабочем каталоге.
Результат выполнения данной команды:
Чтобы перечислить все доступные образы на вашем компьютере, выполните следующую команду:
docker image ls
Также мы можем посмотреть наши образы используя Docker Desktop, перейдя в раздел Images:
Из приведенного выше списка мы видим созданный нами образ django_books.