Docker Python
How to run a Python application in Docker.
Python Dockerfile
# Stage 1: Build
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
COPY . .
# Stage 2: Production
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yml
version: '3.8'
services:
api:
build: .
ports:
- "8000:8000"
environment:
- DJANGO_SETTINGS_MODULE=config.settings.production
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
volumes:
- ./src:/app/src
networks:
- app-net
database:
image: postgres:15
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- db-data:/var/lib/postgresql/data
networks:
- app-net
networks:
app-net:
volumes:
db-data:
Use Case: Python Django
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000"]
Everyday Use Case
Case: A developer needs to run a Python app.
# Build
docker build -t python-app .
# Run
docker run -d -p 8000:8000 python-app
# Development
docker run -d -p 8000:8000 -v $(pwd):/app python:3.11-slim python manage.py runserver
Best Practices
- Use slim: For a smaller image
- Multi-stage build: For production
- Non-root user: For security
- Health check: For monitoring
Conclusion
Python in Docker is easy to set up. Use a multi-stage build for production and slim for a minimal image.