Docker के साथ Swift ऐप्स का कंटेनरीकरण: डेवलपर के लिए पूर्ण गाइड

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

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

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

सर्वर डेवलपमेंट के लिए Swift और Docker एक आदर्श जोड़ी क्यों हैं

\n\n

यदि आप यह सोचने के आदी हैं कि Swift केवल iOS के लिए मोबाइल डेवलपमेंट है, तो आश्चर्यचकित होने का समय आ गया है। Swift आत्मविश्वास से सर्वर साइड पर कदम रख रहा है: Vapor, Kitura, Perfect — ऐसे फ्रेमवर्क जो तेज़ और सुरक्षित बैकएंड लिखने की अनुमति देते हैं। लेकिन एक समस्या है: यह कैसे सुनिश्चित करें कि आपका ऐप डेवलपर के Mac और Ubuntu पर production-सर्वर पर समान रूप से काम करेगा?

\n\n

इसका उत्तर है — Docker के साथ Swift ऐप्स का कंटेनरीकरण। Docker आपको सब कुछ पैकेज करने की अनुमति देता है: बाइनरी, सिस्टम लाइब्रेरी, Swift Package Manager (SPM) निर्भरताएँ — और इसे कहीं भी चलाएँ। कोई "मेरे पास काम करता है" और "मेरे पास नहीं करता" नहीं।

\n\n

इस लेख में, हम देखेंगे कि Swift ऐप को Docker इमेज में कैसे बनाया जाए, इसका आकार कैसे अनुकूलित किया जाए, मल्टी-स्टेज बिल्ड कैसे सेट किया जाए और डेवलपमेंट के लिए हॉट रीलोड भी कैसे जोड़ा जाए। चलिए शुरू करते हैं!

\n\n

चरण 1. Swift ऐप तैयार करना

\n\n

उदाहरण के लिए, हम Vapor पर एक न्यूनतम वेब ऐप लेंगे। यदि आपके पास अभी तक कोई प्रोजेक्ट नहीं है, तो इसे बनाएँ:

\n\n
mkdir MySwiftApp && cd MySwiftApp\nswift package init --type executable
\n\n

Package.swift में Vapor जोड़ें:

\n\n
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n    name: "MySwiftApp",\n    dependencies: [\n        .package(url: "https://github.com/vapor/vapor.git", from: "4.89.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "MySwiftApp",\n            dependencies: [\n                .product(name: "Vapor", package: "vapor")\n            ]\n        )\n    ]\n)
\n\n

सबसे सरल main.swift:

\n\n
import Vapor\n\nvar env = try Environment.detect()\ntry LoggingSystem.bootstrap(from: &env)\nlet app = Application(env)\ndefer { app.shutdown() }\n\napp.get("hello") { req -> String in\n    return "Hello from Swift in Docker!"\n}\n\ntry app.run()
\n\n

जाँचें कि प्रोजेक्ट स्थानीय रूप से कंपाइल होता है: swift build। यदि सब ठीक है — तो कंटेनरीकरण पर चलते हैं।

\n\n

चरण 2. Swift के लिए Dockerfile लिखना

\n\n

अच्छे कंटेनरीकरण का मुख्य रहस्य — मल्टी-स्टेज बिल्ड। पहले चरण में हम बाइनरी कंपाइल करते हैं, दूसरे में — केवल उसे और रनटाइम निर्भरताओं को कॉपी करते हैं। अंतिम इमेज 5-10 गुना छोटी होती है।

\n\n
# ---- चरण 1: बिल्ड ----\nFROM swift:5.9-jammy AS build\n\nWORKDIR /app\n\n# निर्भरताओं को कैश करने के लिए Package.swift और Package.resolved कॉपी करें\nCOPY Package.swift ./\nCOPY Package.resolved ./\n\n# निर्भरताओं को अलग से डाउनलोड करें — यह Docker द्वारा कैश किया जाता है\nRUN swift package resolve\n\n# स्रोत कोड कॉपी करें\nCOPY Sources ./Sources\n\n# रिलीज़ मोड में बिल्ड करें\nRUN swift build -c release --static-swift-stdlib\n\n# ---- चरण 2: रनटाइम ----\nFROM ubuntu:jammy AS runtime\n\n# Swift रनटाइम के लिए न्यूनतम निर्भरताएँ स्थापित करें\nRUN apt-get update && apt-get install -y \\\n    libicu70 \\\n    libcurl4 \\\n    libxml2 \\\n    && rm -rf /var/lib/apt/lists/*\n\nWORKDIR /app\n\n# बिल्ड चरण से केवल बाइनरी कॉपी करें\nCOPY --from=build /app/.build/release/MySwiftApp .\n\n# वह पोर्ट जो Vapor डिफ़ॉल्ट रूप से सुनता है\nEXPOSE 8080\n\nCMD ["./MySwiftApp"]
\n\n

मुख्य बिंदु:

\n
    \n
  • --static-swift-stdlib — मानक लाइब्रेरी का स्टैटिक लिंकिंग, ताकि रनटाइम में libswiftCore.so को न लाना पड़े।
  • \n
  • COPY का विभाजन — पहले Package.swift, फिर कोड। इस तरह Docker लेयर कैश का उपयोग करता है और स्रोत बदलने पर निर्भरताओं को पुनः बिल्ड नहीं करता।
  • \n
  • बेस इमेज ubuntu:jammy का वजन ~80 MB है, अंतिम इमेज — लगभग 100-150 MB।
  • \n
\n\n

चरण 3. कंटेनर का बिल्ड और रन

\n\n

इमेज बनाएँ:

\n\n
docker build -t my-swift-app .
\n\n

रन करें:

\n\n
docker run -p 8080:8080 my-swift-app
\n\n

ओ

ब्लॉग

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