Docker وC#: دليل شامل لحاويات تطبيقات .NET
أصبحت الحاويات المعيار الفعلي لنشر التطبيقات الحديثة. إذا كنت تطور باستخدام C# (.NET)، فإن Docker يسمح لك بتغليف تطبيقك مع جميع تبعياته في حاوية خفيفة ومعزولة. في هذه المقالة، سننتقل من إنشاء Dockerfile بسيط إلى نشر وتشغيل صورة جاهزة. ستتعلم كيفية حاوية تطبيق C#، وتحسين حجم الصورة، واستخدام أفضل الممارسات.
1. أساسيات Docker لمطور .NET
Docker هي منصة لتطوير وتسليم وتشغيل التطبيقات في حاويات. الحاوية هي وحدة برمجية موحدة تتضمن الكود وجميع تبعياته. على عكس الآلات الافتراضية، تستخدم الحاويات نواة نظام تشغيل مشتركة، مما يجعلها أسرع وأخف وزناً.
بالنسبة لـ C# (.NET)، فإن Docker مفيد بشكل خاص لأنه يحل مشكلة "يعمل لدي" - أنت تضمن أن التطبيق سيتصرف بنفس الطريقة على جهاز المطور، وخادم الاختبار، وفي الإنتاج. المكونات الرئيسية:
- Docker Engine — بيئة تشغيل الحاويات
- Dockerfile — ملف نصي يحتوي على تعليمات بناء الصورة
- الصورة (Image) — قالب غير قابل للتغيير لإنشاء الحاويات
- الحاوية (Container) — مثيل قيد التشغيل من الصورة
قم بتثبيت Docker Desktop لنظامي Windows/Mac أو Docker Engine لنظام Linux. بعد التثبيت، تحقق من العمل باستخدام الأمر:
docker --version2. إنشاء Dockerfile لتطبيق C# (.NET)
لنبدأ بتطبيق ASP.NET Core Web API بسيط. قم بإنشاء مشروع جديد:
dotnet new webapi -n MyDockerAppcd MyDockerAppالآن قم بإنشاء ملف Dockerfile (بدون امتداد) في جذر المشروع. إليك الإصدار الأساسي مع البناء متعدد المراحل (multi-stage build):
# المرحلة 1: بناء التطبيقFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src
# نسخ ملف csproj واستعادة التبعياتCOPY ["MyDockerApp.csproj", "."]RUN dotnet restore
# نسخ باقي الكود وبناء المشروعCOPY . .RUN dotnet publish -c Release -o /app/publish
# المرحلة 2: إنشاء صورة مصغرة للتشغيلFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appEXPOSE 80EXPOSE 443
# نسخ التطبيق المبني من المرحلة الأولىCOPY --from=build /app/publish .
# نقطة الدخولENTRYPOINT ["dotnet", "MyDockerApp.dll"]شرح التعليمات الرئيسية:
FROM— يحدد الصورة الأساسية (SDK للبناء، ASP.NET للتشغيل)WORKDIR— يحدد دليل العملCOPY— ينسخ الملفات من سياق البناء إلى الصورةRUN dotnet restore— يستعيد حزم NuGetRUN dotnet publish— يترجم وينشر التطبيقEXPOSE— يحدد المنافذ التي ستستمع إليها الحاويةENTRYPOINT— الأمر الذي يتم تنفيذه عند تشغيل الحاوية
البناء متعدد المراحل أمر بالغ الأهمية لـ C#: الصورة النهائية تحتوي فقط على بيئة التشغيل وتطبيقك، بدون SDK والملفات المصدرية. هذا يقلل حجم الصورة من ~1.5 جيجابايت إلى ~200 ميجابايت.
3. بناء وتشغيل الحاوية
قم ببناء صورة Docker:
docker build -t my-dotnet-app:latest .العلامة -t تحدد الوسم (الاسم:الإصدار). النقطة في النهاية تعني الدليل الحالي كسياق للبناء.
قم بتشغيل الحاوية:
docker run -d -p 8080:80 --name my-app my-dotnet-app:latestالمعلمات:
-d— تشغيل في الخلفية (منفصل)-p 8080:80— توجيه المنفذ: منفذ المضيف 8080