डॉकर और स्विफ्ट: एप्लिकेशन कंटेनरीकरण A से Z तक

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

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

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

परिचय: क्यों डॉकर और स्विफ्ट आधुनिक विकास के लिए एक आदर्श जोड़ी हैं

\n

iOS और macOS के तहत विकास की दुनिया लंबे समय तक विशेष रूप से Xcode और स्थानीय बिल्ड से जुड़ी रही। हालांकि, सर्वर-साइड स्विफ्ट (विशेष रूप से Vapor फ्रेमवर्क) के आगमन और माइक्रोसर्विस आर्किटेक्चर की बढ़ती लोकप्रियता के साथ, कंटेनरीकरण सिर्फ एक ट्रेंड नहीं, बल्कि एक आवश्यकता बन गया है। स्विफ्ट डेवलपर के लिए डॉकर का मतलब सिर्फ एनवायरनमेंट आइसोलेशन नहीं है, बल्कि बिल्ड की एकरूपता, CI/CD की सरलता और किसी भी सर्वर पर आसान डिप्लॉयमेंट भी है।

\n

इस लेख में, हम डॉकर और स्विफ्ट के साथ काम करने के पूरे चक्र को समझेंगे: macOS/Linux के लिए एक सरल Dockerfile लिखने से लेकर Vapor पर एक पूर्ण वेब एप्लिकेशन तैनात करने तक। आप सीखेंगे कि सामान्य गलतियों से कैसे बचें और अपने कंटेनरों को हल्का और सुरक्षित कैसे बनाएं।

\n\n

मुख्य भाग: स्विफ्ट कंटेनरीकरण के लिए चरण-दर-चरण मार्गदर्शिका

\n\n

1. मूल बातें: स्विफ्ट एप्लिकेशन के लिए Dockerfile (macOS बनाम Linux)

\n

पहली बात जो समझनी चाहिए: स्विफ्ट एक क्रॉस-प्लेटफ़ॉर्म भाषा है, लेकिन डॉकर पारंपरिक रूप से Linux कंटेनरों पर काम करता है। macOS विकास के लिए, आप Linux बिल्ड स्विफ्ट वाली इमेज का उपयोग कर सकते हैं (जैसे, swift:5.9-focal) या, यदि आपके लिए macOS वातावरण महत्वपूर्ण है, तो वर्चुअलाइज़ेशन (Docker Desktop for Mac) का उपयोग कर सकते हैं। हालांकि, सर्वर एप्लिकेशन (Vapor, Kitura) के लिए, Linux इमेज मानक हैं।

\n

सर्वर-साइड स्विफ्ट एप्लिकेशन (Vapor) के लिए बेसिक Dockerfile:

\n
# आधिकारिक स्विफ्ट इमेज का उपयोग करें\nFROM swift:5.9-focal AS build\n\n# वर्किंग डायरेक्टरी सेट करें\nWORKDIR /app\n\n# डिपेंडेंसी कैशिंग के लिए Package.swift और Package.resolved फ़ाइलें कॉपी करें\nCOPY Package.swift Package.resolved ./\nRUN swift package resolve\n\n# सोर्स कोड कॉपी करें\nCOPY Sources ./Sources\nRUN swift build -c release\n\n# फाइनल इमेज (न्यूनतम)\nFROM ubuntu:focal\nWORKDIR /app\nCOPY --from=build /app/.build/release /app\nEXPOSE 8080\nCMD ["./Run"]
\n

यह दृष्टिकोण मल्टी-स्टेज बिल्ड का उपयोग करता है: पहला चरण एप्लिकेशन को कंपाइल करता है, दूसरा चरण एक न्यूनतम इमेज बनाता है जिसमें केवल बाइनरी और आवश्यक लाइब्रेरी होती हैं। अंतिम इमेज का आकार 2 GB के बजाय ~60-80 MB होता है।

\n\n

2. इमेज ऑप्टिमाइज़ेशन: कैशिंग और डिपेंडेंसी

\n

स्विफ्ट एक कंपाइल्ड भाषा है, और प्रत्येक बिल्ड में मिनट लग सकते हैं। प्रक्रिया को तेज़ करने के लिए, डॉकर लेयर कैशिंग का उपयोग करें। मुख्य ट्रिक: पहले Package.swift और Package.resolved कॉपी करें, फिर swift package resolve चलाएँ, और उसके बाद ही सोर्स कोड कॉपी करें। यह सुनिश्चित करता है कि डिपेंडेंसी केवल तभी रीबिल्ड होती हैं जब Package.swift बदलता है, न कि हर कोड बदलाव पर।

\n

अतिरिक्त ऑप्टिमाइज़ेशन — .dockerignore का उपयोग:

\n
.git\n.gitignore\n.build\n*.xcworkspace\n*.xcodeproj\nDerivedData\nPackages\nREADME.md\nTests
\n

यह बिल्ड कॉन्टेक्स्ट में अनावश्यक फ़ाइलों (टेस्ट, गिट, Xcode प्रोजेक्ट) को आने से रोकता है, जिससे कॉन्टेक्स्ट ट्रांसफर तेज़ होता है और इमेज का आकार कम होता है।

\n\n

3. Docker Compose: स्विफ्ट को डेटाबेस और कैश से जोड़ना

\n

वास्तविक एप्लिकेशन शायद ही कभी अलग-थलग रहते हैं। Vapor पर एक सामान्य बैकएंड के लिए, आपको PostgreSQL (या Fluent), कैश के लिए Redis, और संभवतः Nginx की आवश्यकता होगी। docker-compose.yml आपको एक ही कमांड से सब कुछ चलाने की अनुमति देता है।

\n

PostgreSQL और Redis के साथ स्विफ्ट एप्लिकेशन के लिए docker-compose.yml का उदाहरण:

\n
version: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - "8080:8080"\n    environment:\n      - DATABASE_HOST=db\n      - DATABASE_PORT=5432\n      - REDIS_HOST=redis\n      - REDIS_PORT=6379\n    depends_on:\n      - db\n      - redis\n    restart: unless-stopped\n\n  db:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: myapp\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    ports:\n      - "5432:5432"\n\n  redis:\n    image:                

ब्लॉग

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