نحوه اجرای پروژههای .net با Docker
نحوه اجرای پروژههای .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 این امکان را فراهم میکند که پروژهها بهصورت مستقل، قابلحمل و حرفهای اجرا شوند؛ چه روی ویندوز، چه لینوکس و چه در محیطهای ابری.
این رویکرد، آینده اجرای پروژههای داتنت را شکل میدهد.