نحوه اجرای پروژه‌های .net با Docker

آموزش داکر، Docker در .NET، اجرای پروژه دات‌نت با Docker، Docker برای برنامه‌نویسان دات‌نت 1404/9/26
نویسنده: مدرس بهمن آبادی

نحوه اجرای پروژه‌های ‎.net‎ با Docker

اجرای داکر در سرور

مقدمه

در سال‌های اخیر، نحوه اجرای پروژه‌های نرم‌افزاری دچار تغییرات اساسی شده است. در گذشته، اجرای پروژه‌های ‎.NET‎ معمولاً وابسته به نصب مستقیم Runtime، وب‌سرور (مانند IIS) و تنظیمات متعدد روی سرور بود. این روش علاوه بر زمان‌بر بودن، مشکلاتی مانند تفاوت محیط توسعه و سرور، ناسازگاری نسخه‌ها و دشواری در استقرار مجدد را به همراه داشت.

Docker به‌عنوان یک راهکار مدرن، این چالش‌ها را برطرف کرده و امکان اجرای پروژه‌های ‎ASP.NET Core‎ و ‎ASP.NET Core Web API‎ را به‌شکلی یکسان، قابل‌حمل و مستقل از محیط فراهم می‌کند. در این مقاله، به‌صورت مفهومی و کاربردی بررسی می‌کنیم که پروژه‌های دات‌نت چگونه با Docker اجرا می‌شوند و چه تفاوتی با اجرای سنتی روی IIS دارند.

Docker چیست و چه مشکلی را حل می‌کند؟

Docker ابزاری برای بسته‌بندی نرم‌افزار به‌همراه تمام وابستگی‌های آن است. این بسته‌بندی در قالب چیزی به نام Container انجام می‌شود. یک کانتینر شامل موارد زیر است:

  • برنامه شما (ASP.NET Core یا Web API)

  • نسخه دقیق ‎.NET Runtime

  • تنظیمات موردنیاز اجرا

  • وابستگی‌های سیستمی

در نتیجه، برنامه‌ای که روی سیستم توسعه‌دهنده اجرا می‌شود، دقیقاً به همان شکل روی سرور نیز اجرا خواهد شد

اجرای پروژه‌های ‎.NET‎ بدون وابستگی به IIS

یکی از نکات مهمی که معمولاً باعث سردرگمی می‌شود، نقش IIS در اجرای پروژه‌های ‎ASP.NET Core‎ است.

واقعیت این است که:

  • ‎ASP.NET Core‎ به‌صورت پیش‌فرض با Kestrel Web Server اجرا می‌شود.

  • IIS فقط یکی از گزینه‌های میزبانی (Hosting) است و الزامی نیست.

  • در Docker، اغلب پروژه‌ها مستقیماً با Kestrel اجرا می‌شوند.

به همین دلیل، در اغلب سناریوهای Docker:

  • IIS داخل کانتینر وجود ندارد.

  • حتی ممکن است سرور مقصد لینوکسی باشد.

این موضوع یکی از تفاوت‌های اساسی بین اجرای سنتی و اجرای مدرن پروژه‌های دات‌نت است

اجزای اصلی اجرای یک پروژه ‎ASP.NET Core‎ با Docker

آموزش داکر با مهندس بهمن آبادی

برای اجرای یک پروژه دات‌نت با Docker، معمولاً با سه مفهوم اصلی سروکار داریم:

۱. Docker Image

Image در واقع الگوی ساخت کانتینر است. برای پروژه‌های دات‌نت، مایکروسافت Imageهای رسمی ارائه می‌دهد که شامل Runtime مناسب هستند، مانند:

  • ‎aspnet‎ برای اجرای برنامه

  • ‎sdk‎ برای Build کردن پروژه

۲. Dockerfile

Dockerfile فایلی متنی است که مشخص می‌کند:

  • پروژه با چه نسخه‌ای از ‎.NET‎ اجرا شود

  • فایل‌ها کجا کپی شوند

  • برنامه با چه دستوری اجرا گردد

به‌صورت مفهومی، Dockerfile جایگزین مراحل دستی نصب و پیکربندی روی سرور است.

۳. Container

Container نتیجه نهایی اجرای Image است؛ یعنی محیطی ایزوله که پروژه شما داخل آن اجرا می‌شود. این کانتینر می‌تواند:

  • روی سیستم توسعه‌دهنده

  • روی سرور داخلی

  • یا روی سرور ابری

بدون هیچ تغییری اجرا شود.

اجرای ASP.NET Core Web API با Docker

از نظر Docker، تفاوتی بین یک پروژه MVC، Razor Pages یا Web API وجود ندارد. آنچه اهمیت دارد:

  • خروجی پروژه (DLL)

  • پورت اجرا

  • تنظیمات محیطی

در پروژه‌های Web API معمولاً:

  • پورت مشخصی برای Listen کردن تعریف می‌شود

  • Connection Stringها به‌صورت Environment Variable تنظیم می‌شوند

  • دیتابیس در کانتینری جداگانه اجرا می‌شود

اجرای دیتابیس در کنار پروژه

در سناریوهای واقعی، دیتابیس نیز معمولاً داخل Docker اجرا می‌شود؛ اما در کانتینری جداگانه. این کار چند مزیت مهم دارد:

  • جداسازی مسئولیت‌ها

  • امکان تعویض یا ارتقای دیتابیس

  • جلوگیری از از بین رفتن داده‌ها با استفاده از Volume

به این ترتیب، Web API و دیتابیس از طریق شبکه داخلی Docker با هم ارتباط برقرار می‌کنند.

اجرای کل سیستم با یک دستور

برای پروژه‌هایی که شامل چند سرویس هستند (Web API، دیتابیس و…)، از Docker Compose استفاده می‌شود.

Docker Compose این امکان را می‌دهد که:

  • کل سیستم در یک فایل تعریف شود

  • تمام سرویس‌ها با یک دستور اجرا شوند

  • وابستگی بین سرویس‌ها مدیریت گردد

این موضوع به‌ویژه در پروژه‌های تیمی و آموزشی بسیار ارزشمند است

Docker جایگزین IIS است؟

خیر. Docker و IIS دو مفهوم متفاوت هستند:

  • IIS یک وب‌سرور است

  • Docker یک ابزار مدیریت محیط اجرا است

در بسیاری از پروژه‌ها:

  • IIS برای آموزش یا زیرساخت‌های سنتی استفاده می‌شود

  • Docker برای استقرار مدرن و قابل‌حمل

شناخت تفاوت این دو، به تصمیم‌گیری درست در معماری پروژه کمک می‌کند.

جمع‌بندی

اجرای پروژه‌های ‎ASP.NET Core‎ و ‎ASP.NET Core Web API‎ با Docker، روشی مدرن، استاندارد و منطبق با نیازهای امروز بازار کار است. Docker با حذف وابستگی به محیط اجرا، فرآیند استقرار را ساده‌تر، سریع‌تر و قابل‌اعتمادتر می‌کند.

درک این نکته که ASP.NET Core برای اجرا الزاماً به IIS نیاز ندارد، یکی از کلیدی‌ترین مفاهیمی است که هر برنامه‌نویس دات‌نت باید بداند. Docker این امکان را فراهم می‌کند که پروژه‌ها به‌صورت مستقل، قابل‌حمل و حرفه‌ای اجرا شوند؛ چه روی ویندوز، چه لینوکس و چه در محیط‌های ابری.

این رویکرد، آینده اجرای پروژه‌های دات‌نت را شکل می‌دهد.