Paths: File paths (shared/, references/, ../ln-*) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root. If shared/ is missing, fetch files via WebFetch from https://raw.githubusercontent.com/levnikolaevich/claude-code-skills/master/{path}.
ln-731-docker-generator
Type: L3 Worker
Category: 7XX Project Bootstrap
Generates production-ready Docker configuration for containerized development.
Purpose & Scope
Creates Docker infrastructure for local development and production:
- Does: Generate Dockerfiles, docker-compose, .dockerignore, nginx config
- Does NOT: Build images, start containers, manage deployments
Inputs
| Input |
Source |
Description |
| Stack Type |
ln-730 coordinator |
frontend, backend-dotnet, backend-python |
| Versions |
Auto-detected |
Node.js, .NET, Python versions |
| Project Name |
Directory name |
Used for container naming |
| Ports |
Defaults or detected |
Frontend: 3000, Backend: 5000/8000, DB: 5432 |
Outputs
| File |
Purpose |
Template |
Dockerfile.frontend |
Frontend build & serve |
dockerfile_frontend.template |
Dockerfile.backend |
Backend build & run |
dockerfile_backend_dotnet.template or dockerfile_backend_python.template |
docker-compose.yml |
Service orchestration |
docker_compose.template |
.dockerignore |
Build context exclusions |
dockerignore.template |
nginx.conf |
Frontend proxy config |
nginx.template |
Workflow
Phase 1: Input Validation
Validate received configuration from coordinator:
- Check stack type is supported (frontend, backend-dotnet, backend-python)
- Verify versions are valid (Node 18+, .NET 8+, Python 3.10+)
- Confirm project directory exists
Output: Validated configuration or error
Phase 2: Template Selection
Select appropriate templates based on stack:
| Stack |
Templates Used |
| Frontend only |
dockerfile_frontend, nginx, dockerignore |
| Backend .NET |
dockerfile_backend_dotnet, docker_compose, dockerignore |
| Backend Python |
dockerfile_backend_python, docker_compose, dockerignore |
| Full stack .NET |
All of the above (dotnet variant) |
| Full stack Python |
All of the above (python variant) |
Phase 3: Variable Substitution
Replace template variables with detected values:
| Variable |
Source |
Example |
{{NODE_VERSION}} |
package.json engines or default |
22 |
{{DOTNET_VERSION}} |
*.csproj TargetFramework |
9.0 |
{{PYTHON_VERSION}} |
pyproject.toml or default |
3.12 |
{{PROJECT_NAME}} |
Directory name |
my-app |
{{DLL_NAME}} |
*.csproj AssemblyName |
MyApp.Api.dll |
{{FRONTEND_PORT}} |
Default or detected |
3000 |
{{BACKEND_PORT}} |
Stack-dependent |
5000 (.NET), 8000 (Python) |
{{BACKEND_HOST}} |
Service name |
backend |
{{CMD}} |
Framework-dependent |
["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] (FastAPI) or ["gunicorn", "--bind", "0.0.0.0:8000", "{{PROJECT_NAME}}.wsgi:application"] (Django) |
Phase 4: File Generation
Generate files from templates:
- Check if file already exists (warn before overwrite)
- Apply variable substitution
- Write file to appropriate location
- Validate syntax where possible
File Locations:
Dockerfile.frontend -> src/frontend/Dockerfile
Dockerfile.backend -> project root
docker-compose.yml -> project root
.dockerignore -> project root
nginx.conf -> src/frontend/nginx.conf
Supported Stacks
Frontend: React/Vite + Nginx
Requirements:
- package.json with build script
- Vite or CRA configuration
Generated:
- Multi-stage Dockerfile (builder + nginx)
- Nginx config with SPA routing and API proxy
Backend: .NET 8/9
Requirements:
- *.sln file in root
- *.csproj with TargetFramework
Generated:
- Multi-stage Dockerfile (SDK build + ASP.NET runtime)
- Health check endpoint configuration
Backend: Python (FastAPI/Django)
Requirements:
- requirements.txt or pyproject.toml
Generated:
- Multi-stage Dockerfile (builder + slim runtime)
- uvicorn (FastAPI) or gunicorn (Django) entrypoint
Security & Performance Best Practices
All generated files follow these guidelines:
| Practice |
Implementation |
| Non-root user |
Create and use appuser (UID 1001) |
| Minimal images |
Alpine/slim variants |
| Multi-stage builds |
Exclude build tools from runtime |
| No secrets |
Use environment variables, not hardcoded |
| Health checks |
Built-in HEALTHCHECK instructions (wget/curl) |
| Specific versions |
Pin base image versions (e.g., nginx:1.27-alpine) |
| Non-interactive mode |
ARG DEBIAN_FRONTEND=noninteractive |
| Layer caching |
Copy dependency files first, source code last |
| BuildKit cache |
Use --mount=type=cache for pip |
| Python optimization |
PYTHONDONTWRITEBYTECODE=1, PYTHONUNBUFFERED=1 |
Quality Criteria
Generated files must meet:
Critical Notes
- Version Detection: Use detected versions from coordinator, not hardcoded defaults.
- Idempotent: Check file existence before writing. Warn if overwriting.
- Template-based: All generation uses templates from references/. Do NOT hardcode file contents.
- Security First: Every generated file must follow security best practices.
Reference Files
| File |
Purpose |
| dockerfile_frontend.template |
React/Vite multi-stage Dockerfile |
| dockerfile_backend_dotnet.template |
.NET multi-stage Dockerfile |
| dockerfile_backend_python.template |
Python multi-stage Dockerfile |
| docker_compose.template |
docker-compose.yml template |
| dockerignore.template |
.dockerignore template |
| nginx.template |
Nginx configuration |
Definition of Done
Version: 1.2.0
Last Updated: 2026-01-21
1---2name: ln-731-docker-generator-43description: Generates Dockerfile and docker-compose configuration for multi-container development. Use when containerizing a project.4license: MIT5---67> **Paths:** File paths (`shared/`, `references/`, `../ln-*`) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root. If `shared/` is missing, fetch files via WebFetch from `https://raw.githubusercontent.com/levnikolaevich/claude-code-skills/master/{path}`.89# ln-731-docker-generator1011**Type:** L3 Worker12**Category:** 7XX Project Bootstrap1314Generates production-ready Docker configuration for containerized development.1516---1718## Purpose & Scope1920Creates Docker infrastructure for local development and production:21- **Does**: Generate Dockerfiles, docker-compose, .dockerignore, nginx config22- **Does NOT**: Build images, start containers, manage deployments2324---2526## Inputs2728| Input | Source | Description |29|-------|--------|-------------|30| **Stack Type** | ln-730 coordinator | frontend, backend-dotnet, backend-python |31| **Versions** | Auto-detected | Node.js, .NET, Python versions |32| **Project Name** | Directory name | Used for container naming |33| **Ports** | Defaults or detected | Frontend: 3000, Backend: 5000/8000, DB: 5432 |3435---3637## Outputs3839| File | Purpose | Template |40|------|---------|----------|41| `Dockerfile.frontend` | Frontend build & serve | [dockerfile_frontend.template](references/dockerfile_frontend.template) |42| `Dockerfile.backend` | Backend build & run | [dockerfile_backend_dotnet.template](references/dockerfile_backend_dotnet.template) or [dockerfile_backend_python.template](references/dockerfile_backend_python.template) |43| `docker-compose.yml` | Service orchestration | [docker_compose.template](references/docker_compose.template) |44| `.dockerignore` | Build context exclusions | [dockerignore.template](references/dockerignore.template) |45| `nginx.conf` | Frontend proxy config | [nginx.template](references/nginx.template) |4647---4849## Workflow5051### Phase 1: Input Validation5253Validate received configuration from coordinator:54- Check stack type is supported (frontend, backend-dotnet, backend-python)55- Verify versions are valid (Node 18+, .NET 8+, Python 3.10+)56- Confirm project directory exists5758**Output**: Validated configuration or error5960### Phase 2: Template Selection6162Select appropriate templates based on stack:6364| Stack | Templates Used |65|-------|----------------|66| **Frontend only** | dockerfile_frontend, nginx, dockerignore |67| **Backend .NET** | dockerfile_backend_dotnet, docker_compose, dockerignore |68| **Backend Python** | dockerfile_backend_python, docker_compose, dockerignore |69| **Full stack .NET** | All of the above (dotnet variant) |70| **Full stack Python** | All of the above (python variant) |7172### Phase 3: Variable Substitution7374Replace template variables with detected values:7576| Variable | Source | Example |77|----------|--------|---------|78| `{{NODE_VERSION}}` | package.json engines or default | 22 |79| `{{DOTNET_VERSION}}` | *.csproj TargetFramework | 9.0 |80| `{{PYTHON_VERSION}}` | pyproject.toml or default | 3.12 |81| `{{PROJECT_NAME}}` | Directory name | my-app |82| `{{DLL_NAME}}` | *.csproj AssemblyName | MyApp.Api.dll |83| `{{FRONTEND_PORT}}` | Default or detected | 3000 |84| `{{BACKEND_PORT}}` | Stack-dependent | 5000 (.NET), 8000 (Python) |85| `{{BACKEND_HOST}}` | Service name | backend |86| `{{CMD}}` | Framework-dependent | `["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]` (FastAPI) or `["gunicorn", "--bind", "0.0.0.0:8000", "{{PROJECT_NAME}}.wsgi:application"]` (Django) |8788### Phase 4: File Generation8990Generate files from templates:911. Check if file already exists (warn before overwrite)922. Apply variable substitution933. Write file to appropriate location944. Validate syntax where possible9596**File Locations**:97- `Dockerfile.frontend` -> `src/frontend/Dockerfile`98- `Dockerfile.backend` -> project root99- `docker-compose.yml` -> project root100- `.dockerignore` -> project root101- `nginx.conf` -> `src/frontend/nginx.conf`102103---104105## Supported Stacks106107### Frontend: React/Vite + Nginx108109**Requirements**:110- package.json with build script111- Vite or CRA configuration112113**Generated**:114- Multi-stage Dockerfile (builder + nginx)115- Nginx config with SPA routing and API proxy116117### Backend: .NET 8/9118119**Requirements**:120- *.sln file in root121- *.csproj with TargetFramework122123**Generated**:124- Multi-stage Dockerfile (SDK build + ASP.NET runtime)125- Health check endpoint configuration126127### Backend: Python (FastAPI/Django)128129**Requirements**:130- requirements.txt or pyproject.toml131132**Generated**:133- Multi-stage Dockerfile (builder + slim runtime)134- uvicorn (FastAPI) or gunicorn (Django) entrypoint135136---137138## Security & Performance Best Practices139140All generated files follow these guidelines:141142| Practice | Implementation |143|----------|----------------|144| **Non-root user** | Create and use appuser (UID 1001) |145| **Minimal images** | Alpine/slim variants |146| **Multi-stage builds** | Exclude build tools from runtime |147| **No secrets** | Use environment variables, not hardcoded |148| **Health checks** | Built-in HEALTHCHECK instructions (wget/curl) |149| **Specific versions** | Pin base image versions (e.g., nginx:1.27-alpine) |150| **Non-interactive mode** | ARG DEBIAN_FRONTEND=noninteractive |151| **Layer caching** | Copy dependency files first, source code last |152| **BuildKit cache** | Use `--mount=type=cache` for pip |153| **Python optimization** | PYTHONDONTWRITEBYTECODE=1, PYTHONUNBUFFERED=1 |154155---156157## Quality Criteria158159Generated files must meet:160- [ ] `docker-compose config` validates without errors161- [ ] All base images use specific versions (not `latest`)162- [ ] Non-root user configured in all Dockerfiles163- [ ] Health checks present for all services164- [ ] .dockerignore excludes all sensitive files165- [ ] No hardcoded secrets or passwords166167---168169## Critical Notes1701711. **Version Detection**: Use detected versions from coordinator, not hardcoded defaults.1722. **Idempotent**: Check file existence before writing. Warn if overwriting.1733. **Template-based**: All generation uses templates from references/. Do NOT hardcode file contents.1744. **Security First**: Every generated file must follow security best practices.175176---177178## Reference Files179180| File | Purpose |181|------|---------|182| [dockerfile_frontend.template](references/dockerfile_frontend.template) | React/Vite multi-stage Dockerfile |183| [dockerfile_backend_dotnet.template](references/dockerfile_backend_dotnet.template) | .NET multi-stage Dockerfile |184| [dockerfile_backend_python.template](references/dockerfile_backend_python.template) | Python multi-stage Dockerfile |185| [docker_compose.template](references/docker_compose.template) | docker-compose.yml template |186| [dockerignore.template](references/dockerignore.template) | .dockerignore template |187| [nginx.template](references/nginx.template) | Nginx configuration |188189---190191## Definition of Done192193- [ ] Dockerfiles generated for all detected stack components (frontend/backend)194- [ ] docker-compose.yml validates without errors (`docker-compose config`)195- [ ] .dockerignore excludes sensitive files and build artifacts196- [ ] All base images use pinned versions (not `latest`)197198---199200**Version:** 1.2.0201**Last Updated:** 2026-01-21