Полный справочник Docker-команд для Django-проектов¶
💡 Для кого: Python/Django-разработчики, DevOps, тимлиды
⏱️ Время чтения: 8 мин | 🔄 Последнее обновление: Май 2026
Docker давно стал стандартом для локальной разработки, но копировать команды из Stack Overflow каждый раз — неэффективно. В этой статье собраны все рабочие Docker-команды, необходимые для Django-проекта, с контекстом, примерами и лайфхаками для ежедневной разработки.
1. Предварительные требования¶
- Docker Engine
24+и Docker Composev2+(команда пишется без дефиса:docker compose) - Базовый
Dockerfileиdocker-compose.yml(пример ниже) - Файл
.envс переменными окружения (DEBUG,SECRET_KEY,DB_*и т.д.)
2. Минимальный стек для Django¶
# Dockerfile
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
# docker-compose.yml
services:
web:
build: .
volumes:
- .:/app
- static_volume:/app/static
ports: ["8000:8000"]
env_file: .env
depends_on: [db, redis]
command: >
sh -c "python manage.py migrate &&
python manage.py collectstatic --noinput &&
python manage.py runserver 0.0.0.0:8000"
db:
image: postgres:16-alpine
volumes: [postgres_/var/lib/postgresql/data]
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASS}
redis:
image: redis:7-alpine
volumes:
postgres_
static_volume:
3. Базовые команды Docker & Compose¶
| Команда | Что делает | Когда использовать |
|---|---|---|
docker compose up -d |
Запуск всех сервисов в фоне | Старт локального окружения |
docker compose down |
Остановка + удаление контейнеров/сетей | Полная очистка стека |
docker compose down -v |
То же + удаление named volumes | Сброс БД/кеша (⚠️ данные удалятся!) |
docker compose ps |
Статус запущенных контейнеров | Проверка, всё ли живо |
docker compose logs -f web |
Логи сервиса web в реальном времени |
Отладка запуска, traceback'и |
docker compose build |
Пересборка образов | После изменения Dockerfile или requirements.txt |
docker compose build --no-cache |
Сборка без кеша | Когда зависимости не подтягиваются корректно |
docker compose exec web bash |
Вход в контейнер web |
Ручные команды, отладка, проверки |
🔹 Важно: В Docker Compose v2 команда пишется
docker compose, а неdocker-compose. Старый формат объявлен deprecated.
4. Django-специфичные команды (внутри контейнеров)¶
Все команды запускаются через docker compose exec web, чтобы не ломать изоляцию и использовать окружение контейнера.
# Миграции
docker compose exec web python manage.py makemigrations
docker compose exec web python manage.py migrate
# Статика
docker compose exec web python manage.py collectstatic --noinput
# Суперпользователь
docker compose exec web python manage.py createsuperuser
# Оболочка
docker compose exec web python manage.py shell
# или с django-extensions:
docker compose exec web python manage.py shell_plus
# Тесты
docker compose exec web python manage.py test
docker compose exec web pytest -xvs # если используете pytest-django
# Консоль БД
docker compose exec db psql -U $DB_USER -d $DB_NAME
# или из веб-контейнера:
docker compose exec web python manage.py dbshell
💡 Почему
exec, а неrun?
runсоздаёт новый контейнер,execиспользует уже запущенный. Для Django это важно: подключенные volume'ы, настроенные переменные окружения и сессии БД сохраняются.
5. One-liners и автоматизация¶
Создайте Makefile или используйте justfile для быстрого доступа:
.PHONY: up down migrate test logs shell rebuild
up:
docker compose up -d
down:
docker compose down
migrate:
docker compose exec web python manage.py migrate
test:
docker compose exec web pytest -x
logs:
docker compose logs -f web
shell:
docker compose exec web python manage.py shell
rebuild:
docker compose build --no-cache && docker compose up -d
Теперь вместо docker compose exec ... пишите make migrate или just test.
6. Отладка и мониторинг¶
| Задача | Команда |
|---|---|
| Посмотреть процессы внутри контейнера | docker compose top web |
| Ресурсы (CPU/RAM) | docker compose stats |
| Очистить dangling images | docker image prune -f |
| Проверить healthcheck | docker inspect --format='{{.State.Health.Status}}' <container> |
| Запустить pdb в контейнере | docker compose exec web python -m pdb manage.py runserver 0.0.0.0:8000 |
| Перезапустить только один сервис | docker compose restart web |
Добавьте healthcheck в docker-compose.yml:
healthcheck:
test: ["CMD", "python", "manage.py", "check"]
interval: 30s
timeout: 10s
retries: 3