خداحافظی با Dockerfile در داتنت ۱۰ با کانتینرسازی بومی (Native Containerization)
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۹/۱۰ ۱۲:۴۸
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
docker build که زمانبر بود و گاهی خطاهای عجیبی میداد# مثال معمول Dockerfile برای یک برنامه کنسولی FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src COPY . . RUN dotnet publish -c Release -o /app/publish FROM mcr.microsoft.com/dotnet/runtime:10.0 WORKDIR /app COPY --from=build /app/publish . ENTRYPOINT ["dotnet", "MyConsoleApp.dll"]
dotnet publish -r linux-x64 /p:PublishProfile=DefaultContainer
docker build میزنید)docker images | grep myapp # یا اگر از Podman استفاده میکنید podman images | grep myapp
docker run --rm myapp:defaultcontainer
# ساخت تصویر با تگ دلخواه dotnet publish /p:PublishProfile=DefaultContainer /p:ContainerImageTag=myapp-v1.2.0 # استفاده از base image دلخواه (مثلاً wolfi یا distroless) dotnet publish /p:PublishProfile=DefaultContainer /p:ContainerBaseImage=mcr.microsoft.com/dotnet/nightly/runtime-deps:10.0 # تولید چند معماری همزمان (multi-arch) dotnet publish -r linux-x64 -r linux-arm64 /p:PublishProfile=DefaultContainer /p:ContainerCreateManifest=true
| مزیت | توضیح |
| سرعت ساخت بسیار بالاتر | دیگر نیازی به لایههای build نیست؛ مستقیم از SDK تصویر ساخته میشود |
| عدم نیاز به Docker daemon | روی ماشینهای بدون Docker (مثل سرورهای لینوکس بدون root) هم کار میکند |
| یکپارچگی کامل با CI/CD | در GitHub Actions، GitLab CI، Azure DevOps فقط یک stage ساده کافی است |
| پشتیبانی Day-0 از ابرها | AWS، Azure، GCP، Heroku، Fly.io، Render و … همه از این تصاویر پشتیبانی میکنند |
| حجم تصویر بهینهتر | به صورت پیشفرض از distroless یا chiseled images استفاده میکند |
فقط dotnet publish /p:PublishProfile=DefaultContainer بزن!