ln-731-docker-generator
Type: L3 Worker
Category: 7XX Project Bootstrap
Parent: ln-730-devops-setup
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 |
Version: 1.2.0
Last Updated: 2026-01-21
1---2name: ln-731-docker-generator-23description: Generates Docker and docker-compose configuration for multi-container development4---56# ln-731-docker-generator78**Type:** L3 Worker9**Category:** 7XX Project Bootstrap10**Parent:** ln-730-devops-setup1112Generates production-ready Docker configuration for containerized development.1314---1516## Purpose & Scope1718Creates Docker infrastructure for local development and production:19- **Does**: Generate Dockerfiles, docker-compose, .dockerignore, nginx config20- **Does NOT**: Build images, start containers, manage deployments2122---2324## Inputs2526| Input | Source | Description |27|-------|--------|-------------|28| **Stack Type** | ln-730 coordinator | frontend, backend-dotnet, backend-python |29| **Versions** | Auto-detected | Node.js, .NET, Python versions |30| **Project Name** | Directory name | Used for container naming |31| **Ports** | Defaults or detected | Frontend: 3000, Backend: 5000/8000, DB: 5432 |3233---3435## Outputs3637| File | Purpose | Template |38|------|---------|----------|39| `Dockerfile.frontend` | Frontend build & serve | [dockerfile_frontend.template](references/dockerfile_frontend.template) |40| `Dockerfile.backend` | Backend build & run | [dockerfile_backend_dotnet.template](references/dockerfile_backend_dotnet.template) or [dockerfile_backend_python.template](references/dockerfile_backend_python.template) |41| `docker-compose.yml` | Service orchestration | [docker_compose.template](references/docker_compose.template) |42| `.dockerignore` | Build context exclusions | [dockerignore.template](references/dockerignore.template) |43| `nginx.conf` | Frontend proxy config | [nginx.template](references/nginx.template) |4445---4647## Workflow4849### Phase 1: Input Validation5051Validate received configuration from coordinator:52- Check stack type is supported (frontend, backend-dotnet, backend-python)53- Verify versions are valid (Node 18+, .NET 8+, Python 3.10+)54- Confirm project directory exists5556**Output**: Validated configuration or error5758### Phase 2: Template Selection5960Select appropriate templates based on stack:6162| Stack | Templates Used |63|-------|----------------|64| **Frontend only** | dockerfile_frontend, nginx, dockerignore |65| **Backend .NET** | dockerfile_backend_dotnet, docker_compose, dockerignore |66| **Backend Python** | dockerfile_backend_python, docker_compose, dockerignore |67| **Full stack .NET** | All of the above (dotnet variant) |68| **Full stack Python** | All of the above (python variant) |6970### Phase 3: Variable Substitution7172Replace template variables with detected values:7374| Variable | Source | Example |75|----------|--------|---------|76| `{{NODE_VERSION}}` | package.json engines or default | 22 |77| `{{DOTNET_VERSION}}` | *.csproj TargetFramework | 9.0 |78| `{{PYTHON_VERSION}}` | pyproject.toml or default | 3.12 |79| `{{PROJECT_NAME}}` | Directory name | my-app |80| `{{DLL_NAME}}` | *.csproj AssemblyName | MyApp.Api.dll |81| `{{FRONTEND_PORT}}` | Default or detected | 3000 |82| `{{BACKEND_PORT}}` | Stack-dependent | 5000 (.NET), 8000 (Python) |83| `{{BACKEND_HOST}}` | Service name | backend |84| `{{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) |8586### Phase 4: File Generation8788Generate files from templates:891. Check if file already exists (warn before overwrite)902. Apply variable substitution913. Write file to appropriate location924. Validate syntax where possible9394**File Locations**:95- `Dockerfile.frontend` -> `src/frontend/Dockerfile`96- `Dockerfile.backend` -> project root97- `docker-compose.yml` -> project root98- `.dockerignore` -> project root99- `nginx.conf` -> `src/frontend/nginx.conf`100101---102103## Supported Stacks104105### Frontend: React/Vite + Nginx106107**Requirements**:108- package.json with build script109- Vite or CRA configuration110111**Generated**:112- Multi-stage Dockerfile (builder + nginx)113- Nginx config with SPA routing and API proxy114115### Backend: .NET 8/9116117**Requirements**:118- *.sln file in root119- *.csproj with TargetFramework120121**Generated**:122- Multi-stage Dockerfile (SDK build + ASP.NET runtime)123- Health check endpoint configuration124125### Backend: Python (FastAPI/Django)126127**Requirements**:128- requirements.txt or pyproject.toml129130**Generated**:131- Multi-stage Dockerfile (builder + slim runtime)132- uvicorn (FastAPI) or gunicorn (Django) entrypoint133134---135136## Security & Performance Best Practices137138All generated files follow these guidelines:139140| Practice | Implementation |141|----------|----------------|142| **Non-root user** | Create and use appuser (UID 1001) |143| **Minimal images** | Alpine/slim variants |144| **Multi-stage builds** | Exclude build tools from runtime |145| **No secrets** | Use environment variables, not hardcoded |146| **Health checks** | Built-in HEALTHCHECK instructions (wget/curl) |147| **Specific versions** | Pin base image versions (e.g., nginx:1.27-alpine) |148| **Non-interactive mode** | ARG DEBIAN_FRONTEND=noninteractive |149| **Layer caching** | Copy dependency files first, source code last |150| **BuildKit cache** | Use `--mount=type=cache` for pip |151| **Python optimization** | PYTHONDONTWRITEBYTECODE=1, PYTHONUNBUFFERED=1 |152153---154155## Quality Criteria156157Generated files must meet:158- [ ] `docker-compose config` validates without errors159- [ ] All base images use specific versions (not `latest`)160- [ ] Non-root user configured in all Dockerfiles161- [ ] Health checks present for all services162- [ ] .dockerignore excludes all sensitive files163- [ ] No hardcoded secrets or passwords164165---166167## Critical Notes1681691. **Version Detection**: Use detected versions from coordinator, not hardcoded defaults.1702. **Idempotent**: Check file existence before writing. Warn if overwriting.1713. **Template-based**: All generation uses templates from references/. Do NOT hardcode file contents.1724. **Security First**: Every generated file must follow security best practices.173174---175176## Reference Files177178| File | Purpose |179|------|---------|180| [dockerfile_frontend.template](references/dockerfile_frontend.template) | React/Vite multi-stage Dockerfile |181| [dockerfile_backend_dotnet.template](references/dockerfile_backend_dotnet.template) | .NET multi-stage Dockerfile |182| [dockerfile_backend_python.template](references/dockerfile_backend_python.template) | Python multi-stage Dockerfile |183| [docker_compose.template](references/docker_compose.template) | docker-compose.yml template |184| [dockerignore.template](references/dockerignore.template) | .dockerignore template |185| [nginx.template](references/nginx.template) | Nginx configuration |186187---188189**Version:** 1.2.0190**Last Updated:** 2026-01-21