Docker और C#: .NET अनुप्रयोगों का शून्य से कंटेनरीकरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें
```html

परिचय: C# अनुप्रयोगों को कंटेनरीकृत क्यों करें?

C# (.NET) में आधुनिक विकास शायद ही कभी Docker के बिना होता है। कंटेनरीकरण आपको एप्लिकेशन को उसकी सभी निर्भरताओं, रनटाइम वातावरण और कॉन्फ़िगरेशन के साथ एक पृथक इमेज में पैकेज करने की अनुमति देता है। यह "मेरी मशीन पर काम करता है" समस्या को हल करता है और सर्वर, क्लाउड या स्थानीय बुनियादी ढांचे पर डिप्लॉयमेंट को सरल बनाता है।

इस लेख में, हम चर्चा करेंगे कि .NET एप्लिकेशन (ASP.NET Core या कंसोल) के लिए Docker इमेज कैसे बनाएं, इसका आकार कैसे अनुकूलित करें, डेटाबेस के साथ जोड़ने के लिए docker-compose का उपयोग कैसे करें और CI/CD कैसे सेट अप करें। सभी कोड उदाहरण C# में लिखे गए हैं और उपयोग के लिए तैयार हैं।



1. .NET डेवलपर के लिए Docker की मूल बातें

Docker कंटेनरों में एप्लिकेशन चलाने के लिए एक प्लेटफॉर्म है। एक कंटेनर में सब कुछ होता है: कोड, रनटाइम वातावरण (runtime), लाइब्रेरी और सेटिंग्स। .NET के लिए यह विशेष रूप से सुविधाजनक है, क्योंकि आपको सर्वर पर .NET SDK स्थापित करने की आवश्यकता नहीं है - बस Docker पर्याप्त है।



1.1. Docker स्थापित करना

आधिकारिक वेबसाइट से Docker Desktop डाउनलोड और इंस्टॉल करें। इंस्टॉलेशन के बाद, संस्करण जांचें:

docker --version


1.2. .NET प्रोजेक्ट की संरचना

मान लीजिए कि हमारे पास एक सरल ASP.NET Core Web API एप्लिकेशन है। फ़ोल्डर संरचना:

MyApp/├── MyApp.csproj├── Program.cs├── Controllers/│   └── WeatherController.cs└── Dockerfile


2. .NET एप्लिकेशन के लिए Dockerfile बनाना

Dockerfile इमेज बनाने के निर्देश हैं। .NET के लिए, बिल्ड और रनटाइम चरणों को अलग करने के लिए मल्टी-स्टेज बिल्ड (multi-stage build) का उपयोग करने की अनुशंसा की जाती है। इससे अंतिम इमेज का आकार कम हो जाता है।



2.1. बेसिक Dockerfile

प्रोजेक्ट की रूट में Dockerfile फ़ाइल बनाएं:

# बिल्ड स्टेजFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /srcCOPY ["MyApp.csproj", "."]RUN dotnet restoreCOPY . .RUN dotnet publish -c Release -o /app/publish

# रनटाइम स्टेजFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/publish .EXPOSE 80ENTRYPOINT ["dotnet", "MyApp.dll"]

स्पष्टीकरण:

  • FROM ... AS build - कंपाइलेशन के लिए SDK का उपयोग करें।
  • COPY ["MyApp.csproj", "."] - रिस्टोर कैशिंग के लिए केवल प्रोजेक्ट फ़ाइल कॉपी करें।
  • RUN dotnet restore - NuGet पैकेज पुनर्स्थापित करें।
  • RUN dotnet publish - रिलीज़ वर्जन बनाएं।
  • FROM ... AS runtime - न्यूनतम aspnet इमेज का उपयोग करें।
  • EXPOSE 80 - पोर्ट 80 खोलें।
  • ENTRYPOINT - एप्लिकेशन शुरू करने का कमांड।


2.2. इमेज बनाना और चलाना

प्रोजेक्ट फ़ोल्डर से टर्मिनल में कमांड चलाएँ:

docker build -t myapp:latest .docker run -d -p 8080:80 --name myapp_container myapp:latest

अब एप्लिकेशन http://localhost:8080 पर उपलब्ध है।



3. .NET के लिए Docker इमेज का अनुकूलन

बड़ी इमेज डिप्लॉयमेंट को धीमा करती हैं और संसाधनों की खपत करती हैं। अनुकूलन के लिए कुछ अभ्यास:



3.1. .NET 8 (या नया) का उपयोग करें

.NET के नए संस्करणों में AOT (Ahead-of-Time) कंपाइलेशन के लिए अंतर्निहित समर्थन है, जो रनटाइम आकार को कम करता है। ASP.NET Core के लिए aspnet:8.0 इमेज का उपयोग करें।



3.2. लेयर्स को कम करें

प्रत्येक RUN, COPY निर्देश एक लेयर बनाता है। कमांड को मर्ज करें:

RUN apt-get update && apt-get install -y \    curl \    && rm -rf /var/lib/apt/lists/*


3.3. .dockerignore का उपयोग करें

अनावश्यक फ़ाइलों को बाहर करने के लिए प्रोजेक्ट रूट में .dockerignore फ़ाइल बनाएं:

bin/obj/.vs/*.user.git/README.md


3.4. अनुकूलित Dockerfile का उदाहरण

FROM mcr.microsoft
```                

ब्लॉग

पुस्तक अनुशंसाएँ