Docker Workflows Skill When to Activate Activate this skill when: Creating Dockerfiles for applications Setting up docker-compose environments Containerizing Python/UV projects Configuring multi-stage builds Managing container secrets Quick Commands
Build image
docker build -t my-app:latest .
Run container
docker run -d -p 8000 :8000 --name my-app my-app:latest
View logs
docker logs -f my-app
Execute in container
docker exec -it my-app bash
Stop and remove
docker stop my-app && docker rm my-app
Clean up
docker system prune -a Basic Dockerfile (Python/UV) FROM python:3.11-slim WORKDIR /app
Install UV
COPY --from = ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
Copy dependency files (layer caching)
COPY pyproject.toml uv.lock ./
Install dependencies
RUN uv sync --frozen --no-dev
Copy application
COPY . . EXPOSE 8000 CMD [ "uv" , "run" , "python" , "main.py" ] Multi-Stage Build (Production)
Stage 1: Builder
FROM python:3.11-slim AS builder WORKDIR /app COPY --from = ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev COPY . .
Stage 2: Runtime
FROM python:3.11-slim WORKDIR /app
Create non-root user
RUN useradd -m -u 1000 appuser && chown appuser:appuser /app
Copy from builder
COPY --from = builder /app/.venv /app/.venv COPY --from = builder /app /app USER appuser ENV PATH= "/app/.venv/bin:$PATH" EXPOSE 8000 CMD [ "python" , "main.py" ] .dockerignore pycache/ .pyc .git/ .env .venv/ venv/ .log .DS_Store .pytest_cache/ tests/ docs/ *.md Docker Compose (App + Database) version : '3.8' services : app : build : . ports : - "8000:8000" environment : - DATABASE_URL=postgresql : //user : password@db : 5432/myapp depends_on : - db volumes : - ./app : /app
Development: live reload
db : image : postgres : 15 - alpine environment : - POSTGRES_USER=user - POSTGRES_PASSWORD=password - POSTGRES_DB=myapp volumes : - postgres_data : /var/lib/postgresql/data ports : - "5432:5432" volumes : postgres_data : Compose Commands
Start all services
docker-compose up -d
View logs
docker-compose logs -f app
Stop services
docker-compose down
Rebuild and restart
docker-compose up -d --build
Run command in service
docker-compose exec app bash
Remove volumes (deletes data!)
docker-compose down -v Layer Caching Best Practice
Good: Dependencies cached separately
COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev COPY . .
Bad: Cache invalidated on every code change
COPY . . RUN uv sync --frozen --no-dev Security Essentials
Use official slim images
FROM python:3.11-slim
Run as non-root
RUN useradd -m -u 1000 appuser USER appuser
Don't include secrets in images
Use runtime environment variables instead
Runtime Secrets
Pass via environment
docker run -e API_KEY = secret my-app
Use env file
docker run --env-file .env.production my-app
With compose
services: app: env_file: - .env.production Volume Types
Named volume (data persistence)
docker run -v postgres_data:/var/lib/postgresql/data postgres
Bind mount (development)
docker run -v $( pwd ) /app:/app my-app Debugging
Interactive shell
docker exec -it container_name bash
Real-time logs
docker logs -f --tail 100 container_name
Inspect configuration
docker inspect container_name
Resource usage
docker stats container_name
Copy files
docker cp container_name:/app/logs ./logs Common Issues Container exits immediately docker logs container_name
Check for errors
docker run -it app:v1 bash
Debug interactively
Can't connect to container docker ps
Check port mapping
docker inspect container_name
Check network config
Out of disk space docker system df
Check usage
docker system prune -a
Clean everything
Related Resources See AgentUsage/docker_guide.md for complete documentation including: Advanced multi-stage patterns Docker Compose variations Production optimization CI/CD integration