container-publish

Dockerfile-less containerization using the .NET 10 SDK container publishing feature. Covers MSBuild properties, chiseled images, multi-arch builds, and registry publishing — all without writing a Dockerfile. Load this skill when the user wants to containerize without a Dockerfile, or mentions "dotne

By codewithmukesh · 1,174 installs

npx skills add codewithmukesh/dotnet-claude-kit --skill container-publish

Source repository · Upstream listing

Container Publishing (No Dockerfile) Core Principles 1. No Dockerfile needed — The .NET 10 SDK builds OCI compliant container images directly from dotnet publish /t:PublishContainer . No Dockerfile to write or maintain. 2. Chiseled images for production — Use noble chiseled base images: no shell, no package manager, 7 Linux components vs 100+. Smallest attack surface. 3. Non root by default — .NET 10 container images run as the app user automatically. Never override to root in production. 4. Configuration in the .csproj — All container settings are MSBuild properties, versioned with your project. No separate files to drift. Patterns Minimal Container Publish No project file changes needed. Just publish: This creates a container image in your local Docker daemon using the default aspnet:10.0 base image. Production Ready .csproj Configuration Publishing to a Registry Authenticate with docker login first, then specify the registry: Multi Architecture Images Build images for multiple platforms with a single publish: This produces an OCI Image Index — registries serve the correct architecture automatically. Multiple Tags Or in the project file: Save as Tarball (No Docker Required) No container runtime needed on the build machine. Useful for CI scanning: Chiseled Image Variants ContainerFamily Use Case Shell Size (default) General purpose (Debian) Yes ~220 MB noble chiseled Production (no shell) No ~110 MB noble chiseled extra Production with localization (ICU) No ~120 MB alpine Small size, has shell Yes ~112 MB For Native AOT, the SDK auto selects chiseled aot : CI/CD with GitHub Actions Anti patterns Don't Use the Deprecated Property Names Don't Use PublishProfile=DefaultContainer Don't Forget to Target Linux Don't Skip Authentication Before Push Don't Use SDK Publishing When You Need OS Packages Decision Guide Scenario Recommendation Standard ASP.NET Core API SDK container publishing with noble chiseled Worker service / console app SDK container publishing (native .NET 10 support) Needs native OS packages Dockerfile (or custom base image + SDK publishing) Azure Functions Dockerfile (not supported by SDK publishing) CI without Docker daemon Tarball output with ContainerArchiveOutputPath Multi arch deployment (x64 + arm64) ContainerRuntimeIdentifiers property Production image size noble chiseled (~110 MB) or Native AOT (~10 MB) Local development dotnet publish /t:PublishContainer os linux arch x64 Registry push ContainerRegistry + docker login