Template
Refines conventions for ASP.NET API endpoints, C# documentation, Docker build arguments, MSBuild package management, and testing method naming and structure. These changes aim to enhance clarity and enforce best practices across the codebase.
32 lines
1.7 KiB
Markdown
32 lines
1.7 KiB
Markdown
---
|
|
description: "Use when editing Dockerfile, compose files, or Docker-related configuration. Covers guardrails for the multi-stage build and runtime image selection."
|
|
applyTo: "docker/**,compose*.yaml"
|
|
---
|
|
# Docker Conventions
|
|
|
|
`docker/Dockerfile` is a multi-stage pipeline — stage names and purposes are visible in the file itself.
|
|
|
|
## Guardrails
|
|
|
|
- **Build context** is always the repo root, not `docker/`.
|
|
- **`COPY --link`** is used intentionally for layer cache — do not replace with plain `COPY`.
|
|
- **Cache mounts** (`--mount=type=cache,target=/root/.nuget/packages`) must stay on restore, build, test, and publish steps.
|
|
- **Stage dependency chain** must be preserved (e.g., `build` → `restore`, `test` → `build`, `publish` → `test`).
|
|
- New stages should follow the existing pattern: `FROM <parent> AS <name>`.
|
|
|
|
## Build Args
|
|
|
|
- `RUNTIME_BASE`: `web` (ASP.NET), `app` (console), or `self-contained`. If a use case does not match `web`, `app`, or `self-contained`, do not invent a new `RUNTIME_BASE` value — flag this to the user and ask which existing value best fits their scenario.
|
|
- `CONFIGURATION`: `Release` (default) or `Debug`
|
|
- `PUBLISHED_PROJECT`: Project name to publish (without path or extension)
|
|
- `DATABASE_PROJECT`: EF Core project for migration bundles
|
|
- `DBCONTEXT`: Optional DbContext name for migrations. If omitted, the migration bundle step must not pass `--context`; EF Core auto-discovers the single DbContext in `DATABASE_PROJECT`.
|
|
|
|
## Image Selection
|
|
|
|
| Use Case | `RUNTIME_BASE` | Base Image |
|
|
|----------|----------------|------------|
|
|
| ASP.NET web apps | `web` | `aspnet:*-alpine-composite-extra` |
|
|
| Console / worker | `app` | `runtime:*-alpine-extra` |
|
|
| Self-contained | `self-contained` | `runtime-deps:*-alpine-extra` |
|