Docker और Swift: iOS और macOS पर एप्लिकेशन का कंटेनरीकरण

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

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

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

परिचय: Swift डेवलपर को Docker की आवश्यकता क्यों?



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



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



1. Swift के लिए Docker की मूल बातें: Dockerfile और मल्टी-स्टेज बिल्ड



Swift एप्लिकेशन को कंटेनरीकृत करने का मानक तरीका मल्टी-स्टेज बिल्ड का उपयोग करना है। यह कंपाइलेशन चरण (जहां भारी Swift टूल्स की आवश्यकता होती है) और रनटाइम चरण (जहां केवल कंपाइल किया गया बाइनरी पर्याप्त होता है) को अलग करने की अनुमति देता है।



एक सामान्य Swift प्रोजेक्ट पर विचार करें, उदाहरण के लिए, Vapor पर एक सर्वर। प्रोजेक्ट की रूट डायरेक्टरी में Dockerfile फ़ाइल बनाएं:



# पहला चरण: बिल्डFROM swift:5.9-focal AS build

WORKDIR /app

# डिपेंडेंसी कैशिंग के लिए Package.swift और Package.resolved फ़ाइलें कॉपी करेंCOPY Package.swift Package.resolved ./RUN swift package resolve

# सोर्स कोड कॉपी करेंCOPY . .

# रिलीज़ मोड में बिल्ड करेंRUN swift build -c release --static-swift-stdlib

# दूसरा चरण: रनटाइम के लिए न्यूनतम इमेजFROM ubuntu:focal

WORKDIR /app

# पहले चरण से बिल्ट बाइनरी कॉपी करेंCOPY --from=build /app/.build/release/Run .

# पोर्ट खोलें (डिफ़ॉल्ट रूप से Vapor 8080 का उपयोग करता है)EXPOSE 8080

# एप्लिकेशन चलाएंCMD ["./Run"]


महत्वपूर्ण बिंदु:

  • --static-swift-stdlib — Swift स्टैंडर्ड लाइब्रेरी का स्टैटिक लिंकेज रनटाइम चरण में डिपेंडेंसी को कम करता है।
  • सोर्स कोड से पहले Package.swift को कॉपी करना Docker डिपेंडेंसी लेयर को कैश करने की एक ट्रिक है।
  • बेस इमेज ubuntu:focal हल्की है लेकिन इसमें सभी आवश्यक सिस्टम लाइब्रेरीज़ शामिल हैं।


2. कंटेनर का बिल्ड और रन



अब जब Dockerfile तैयार है, तो इमेज बनाएं और कंटेनर चलाएं:



# इमेज बिल्ड करेंdocker build -t my-swift-app .

# पोर्ट फ़ॉरवर्डिंग के साथ बैकग्राउंड में कंटेनर चलाएंdocker run -d -p 8080:8080 --name swift-container my-swift-app

# लॉग चेक करेंdocker logs swift-container

# टेस्टिंग (यदि एप्लिकेशन HTTP सर्वर है)curl http://localhost:8080/


यदि आप Vapor के बिना Swift Package Manager का उपयोग कर रहे हैं, तो बाइनरी का नाम अलग हो सकता है। ऐसे में COPY --from=build और CMD में पथ बदलें। बाइनरी का सटीक नाम इस कमांड से पता करें:



swift build -c release --show-bin-path


2.1. .dockerignore के साथ काम करना



बिल्ड कॉन्टेक्स्ट में अनावश्यक फ़ाइलें (जैसे .git, build/) कॉपी न करने के लिए, .dockerignore बनाएं:



.git.gitignore.build/*.xcodeproj*.xcworkspace.DS_StoreREADME.md


3. Swift एप्लिकेशन के लिए Docker Compose



यदि आपका प्रोजेक्ट डेटाबेस (PostgreSQL, Redis) या कई माइक्रोसर्विसेज़ का उपयोग करता है, तो docker-compose.yml का उपयोग करना सुविधाजनक है। Vapor + PostgreSQL के लिए उदाहरण:



version: '3.8'

services: app: build: . ports: - "8080:8080" environment: - DATABASE_HOST=db - DATABASE_PORT=5432 - DATABASE_NAME=vapor_db - DATABASE_USER=vapor_user - DATABASE_PASSWORD=secret depends_on: - db

db: image: postgres:15 environment: POSTGRES_DB: vapor_db POSTGRES_USER: vapor_user POSTGRES_PASSWORD: secret ports: ```

ब्लॉग

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