CodeShot
Seniorسختی 4 از ۵· در 48٪ مصاحبه‌های این حوزه پرسیده شده

چگونه یک Multi-stage Dockerfile کارایی build را بهتر می‌کند؟

نشان کردن

پاسخ کوتاه

با جدا کردن مرحلهٔ Build (شامل SDK کامل و ابزارهای کامپایل) از مرحلهٔ نهایی اجرا (فقط Runtime سبک)، حجم نهایی Image را به‌شدت کاهش می‌دهد.

پاسخ کامل

در مرحلهٔ اول از Image سنگین SDK برای کامپایل کد استفاده می‌شود؛ در مرحلهٔ دوم فقط فایل‌های خروجی (publish) به یک Image سبک‌تر Runtime کپی می‌شوند، بدون اینکه ابزارهای SDK وارد Image نهایی شوند.

مثال کد

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApi.dll"]

نکته مهم

Image نهایی می‌تواند چند برابر کوچک‌تر از Image ساخته‌شده با یک مرحلهٔ SDK کامل باشد.

اشتباه رایج

❌ استفاده از Image سنگین SDK برای اجرای نهایی Production به‌جای فقط مرحلهٔ Runtime.