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