🎯

docker-workflows

🎯Skill

from autumnsgrove/groveengine

VibeIndex|
What it does

docker-workflows skill from autumnsgrove/groveengine

docker-workflows

Installation

Install skill:
npx skills add https://github.com/autumnsgrove/groveengine --skill docker-workflows
1
Last UpdatedJan 29, 2026

Skill Details

SKILL.md

Create Dockerfiles, docker-compose configurations, and container workflows for Python projects with UV. Use when containerizing applications, setting up development environments, or deploying with Docker.

Overview

# 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

```bash

# 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)

```dockerfile

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)

```dockerfile

# 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)

```yaml

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

```bash

# 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

```dockerfile

# 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

```dockerfile

# 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

```bash

# 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

```bash

# 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

```bash

# 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

```bash

docker logs container_name # Check for errors

docker run -it app:v1 bash # Debug interactively

```

Can't connect to container

```bash

docker ps # Check port mapping

docker inspect container_name # Check network config

```

Out of disk space

```bash

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