Plantilla Destacado Acceso Libre 20 Feb, 2026

Template: Docker Compose para Django + PostgreSQL + Redis

Docker Compose completo para desarrollo local de Django. Incluye PostgreSQL, Redis, Celery worker, y hot-reload. Copy-paste y funciona.

#docker #django #postgresql #redis #devops

Contenido

Docker Compose para Django + PostgreSQL + Redis

Setup completo de desarrollo local. Un solo docker-compose up y tienes Django, PostgreSQL y Redis corriendo con hot reload.

docker-compose.yml

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
      - pip-cache:/root/.cache/pip
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://django:django@db:5432/django_db
      - REDIS_URL=redis://redis:6379/0
      - DEBUG=True
      - SECRET_KEY=dev-secret-key-cambiar-en-produccion
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: django
      POSTGRES_PASSWORD: django
      POSTGRES_DB: django_db
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U django -d django_db"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data

  celery:
    build: .
    command: celery -A config worker -l info
    volumes:
      - .:/app
    environment:
      - DATABASE_URL=postgresql://django:django@db:5432/django_db
      - REDIS_URL=redis://redis:6379/0
    depends_on:
      - web
      - redis

volumes:
  pgdata:
  redisdata:
  pip-cache:

Dockerfile

FROM python:3.12-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends     libpq-dev gcc &&     apt-get clean && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

settings.py (fragmento para Docker)

import dj_database_url
import os

DATABASES = {
    'default': dj_database_url.config(
        default=os.environ.get('DATABASE_URL', 'sqlite:///db.sqlite3'),
        conn_max_age=600,
    )
}

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': os.environ.get('REDIS_URL', 'redis://localhost:6379/0'),
        'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'},
    }
}

CELERY_BROKER_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379/0')
CELERY_RESULT_BACKEND = CELERY_BROKER_URL

Makefile (atajos útiles)

up:
	docker compose up -d

down:
	docker compose down

logs:
	docker compose logs -f web

shell:
	docker compose exec web python manage.py shell

migrate:
	docker compose exec web python manage.py migrate

makemigrations:
	docker compose exec web python manage.py makemigrations

test:
	docker compose exec web python manage.py test --verbosity=2

reset-db:
	docker compose down -v
	docker compose up -d
	sleep 3
	docker compose exec web python manage.py migrate
	docker compose exec web python manage.py createsuperuser

Comandos frecuentes

# Levantar todo
docker compose up -d

# Ver logs en tiempo real
docker compose logs -f web

# Entrar al contenedor
docker compose exec web bash

# Correr migraciones
docker compose exec web python manage.py migrate

# Crear superusuario
docker compose exec web python manage.py createsuperuser

# Reset completo (borra datos!)
docker compose down -v && docker compose up -d

Recurso Externo

Este recurso incluye un enlace externo. Regístrate para acceder.

Inicia Sesión para Acceder

Únete a la Comunidad

Regístrate gratis para descargar archivos, guardar recursos en favoritos, ganar XP y acceder a cursos y el foro de la comunidad.

¿Ya tienes cuenta? Inicia sesión

Erik Taveras

Autor

Erik Taveras

Recursos Relacionados