मुख्य सामग्री पर जाएँ

Podman Compose: Docker Compose का रूटलेस विकल्प

Podman Compose एक Python-आधारित टूल है जो Docker Compose फ़ाइलें पढ़ता है और Podman की रूटलेस, डेमनलेस आर्किटेक्चर का उपयोग करके मल्टी-कंटेनर एप्लिकेशंस चलाता है—सुरक्षा-केंद्रित डेवलपमेंट एनवायरनमेंट्स के लिए उपयुक्त।
· 12 मि॰ पढ़ें

AI के साथ खोजें

मान लीजिए आपके पास एक docker-compose.yml फ़ाइल है जो महीनों से काम कर रही है। लेकिन अब आपको Docker की जगह Podman का उपयोग करना है, और आपको समझ नहीं आ रहा कि फ़ाइल में बदलाव करने होंगे या शुरुआत से बनानी पड़ेगी। आपका लोकल डेवलपमेंट एनवायरनमेंट उसी Compose फ़ाइल पर निर्भर है, और पूरे सेटअप को फिर से बनाना फिलहाल आपके लिए संभव नहीं।

अच्छी खबर यह है कि Podman Compose आपको मौजूदा Compose फ़ाइलें Docker की बजाय Podman के साथ चलाने देता है। यह एक Python-आधारित कम्पैटिबिलिटी लेयर है जो आपकी Compose परिभाषाओं को Podman कमांड्स में अनुवाद करती है, ताकि आप वही मल्टी-कंटेनर वर्कफ़्लो इस्तेमाल कर सकें जिससे आप परिचित हैं।

इस लेख में, मैं बताऊँगा कि Podman Compose क्या है, इसे कैसे इंस्टॉल करें, और इससे अपनी पहली मल्टी-कंटेनर एप्लिकेशन कैसे चलाएँ। यदि आप इस लेख के कुछ कॉन्सेप्ट्स में नए हैं, तो हमारे Containerization and Virtualization Concepts कोर्स में नामांकन करें ताकि बुनियादी समझ बन सके।

Podman Compose क्या है?

Podman Compose एक Python-आधारित टूल है जो आपकी docker-compose.yml फ़ाइलों को पढ़कर उन्हें Podman कमांड्स में अनुवाद करता है।

आप अब भी मानक Docker Compose फ़ाइल ही लिखते हैं—जिसमें सेवाएँ, नेटवर्क्स, और वॉल्यूम्स परिभाषित होते हैं। Podman Compose उस फ़ाइल को पार्स करता है और समकक्ष podman कमांड्स चलाकर आपके कंटेनर्स स्टार्ट करता है। यह आपके लिए अनुवाद का काम कर देता है, ताकि आपको Compose सिंटैक्स को मैन्युअली Podman CLI कमांड्स में बदलने की जरूरत न पड़े।

यह ध्यान रखना ज़रूरी है कि Podman Compose Docker Compose का बिल्कुल वैकल्पिक प्रतिस्थापन नहीं है।

यह एक कम्पैटिबिलिटी लेयर है। कुछ Docker Compose फीचर्स तुरंत काम करते हैं, कुछ में समायोजन चाहिए, और कुछ बिल्कुल काम नहीं करते। टूल का लक्ष्य संगतता है, लेकिन यह Docker Compose के हर व्यवहार की हूबहू नकल नहीं करता।

इसे दूसरे तरीके से समझें: Docker Compose सीधे Docker डेमन से बात करता है। Podman Compose Podman CLI से बात करता है, जो बिना डेमन के कंटेनर्स मैनेज करता है। नतीज़ा मिलता-जुलता दिखता है, पर अंदरूनी तंत्र अलग है।

यानी आप अपनी ज़्यादातर मौजूदा Compose फ़ाइलें फिर से इस्तेमाल कर सकते हैं, लेकिन यह समझना होगा कि फर्क कहाँ-कहाँ पड़ता है।

Podman Compose क्यों उपयोग करें?

Podman Compose आपको Docker इंस्टॉल किए बिना मल्टी-कंटेनर एप्लिकेशंस चलाने देता है।

Docker की तुलना में आपको डिफ़ॉल्ट रूप से रूटलेस कंटेनर्स मिलते हैं। Podman कंटेनर्स को बिना रूट प्रिविलेज के चलाता है। सीधी भाषा में, अगर कोई कंटेनर समझौता हो भी जाए तो जोखिम कम होता है। Docker में डेमन को रूट के तौर पर चलना पड़ता है, भले ही आप उसके ऊपर रूटलेस कंटेनर्स चला रहे हों।

यह Podman Compose को सुरक्षा-केन्द्रित एनवायरनमेंट्स के लिए बेहतर बनाता है। यदि आप सख्त Linux सर्वर्स पर काम कर रहे हैं या ऐसे माहौल में जहाँ रूट-लेवल डेमन चलाने की अनुमति नहीं, तो Podman Compose आपको जरूरी मल्टी-कंटेनर वर्कफ़्लो देता है।

यह डेवलपमेंट और टेस्टिंग के लिए भी उपयोगी है। आप लोकल एनवायरनमेंट स्पिन अप कर सकते हैं, कंटेनर कॉन्फ़िगरेशन टेस्ट कर सकते हैं, और बिना Docker इंस्टॉल किए Compose फ़ाइलों को वैलिडेट कर सकते हैं। यह उन हल्के डिप्लॉयमेंट्स के लिए बढ़िया है जहाँ आपको फुल ऑर्केस्ट्रेशन की जरूरत नहीं।

लेकिन यह भी ध्यान दें कि Podman Compose हर स्थिति के लिए आदर्श नहीं है।

यदि आप बड़े पैमाने पर प्रोडक्शन वर्कलोड्स चला रहे हैं, तो Kubernetes या Docker Swarm बेहतर हैं। Linux की तुलना में macOS और Windows पर Podman Compose का सपोर्ट कमजोर है, इसलिए क्रॉस-प्लैटफ़ॉर्म डेवलपमेंट उतना सहज नहीं होगा। और यदि आपकी टीम Docker इकोसिस्टम—कस्टम प्लगइन्स व टूलिंग—में निवेश कर चुकी है, तो Podman Compose पर स्विच करने का मतलब उस वर्कफ़्लो के कुछ हिस्से फिर से बनाना होगा।

समाप्ति में, जब आपको रूटलेस कंटेनर्स, सुरक्षा-पहले वाले एनवायरनमेंट्स, या Docker-रहित डेवलपमेंट सेटअप चाहिए हो, तब Podman Compose का उपयोग करें।

Podman Compose इंस्टॉल करना

Podman Compose Linux पर सबसे अच्छा काम करता है, जहाँ Podman नैटिवली चलता है।

आप इसे macOS और Windows पर भी इंस्टॉल कर सकते हैं, लेकिन पहले आपको Podman को एक वर्चुअल मशीन में चलाना होगा। इससे जटिलता बढ़ती है और यह Linux जितना सहज नहीं होता। यदि आप macOS या Windows पर हैं, तो अतिरिक्त सेटअप चरणों और संभावित नेटवर्किंग समस्याओं की उम्मीद रखें।

Linux पर इंस्टॉलेशन

Podman Compose इंस्टॉल करने का सबसे आसान तरीका pip के ज़रिए है।

pip install podman-compose

Linux पर Podman compose इंस्टॉल करना

Linux पर Podman compose इंस्टॉल करना

यह PyPI से नवीनतम संस्करण इंस्टॉल करता है। आपको Python वर्ज़न मैनेजमेंट की चिंता करने की ज़रूरत नहीं—यदि आपके पास Python 3 इंस्टॉल है, तो आप तैयार हैं।

कुछ Linux डिस्ट्रीब्यूशन्स अपनी रिपॉज़िटरी में भी Podman Compose पैकेज करती हैं। Fedora, RHEL और CentOS पर आप यह कमांड चला सकते हैं:

sudo dnf install podman-compose

Ubuntu और Debian-आधारित सिस्टम्स पर यह चलाएँ:

sudo apt install podman-compose

पैकेज मैनेजर वाले संस्करण अक्सर PyPI से पीछे रहते हैं, इसलिए आपको नए फीचर्स तुरंत न मिलें।

macOS और Windows पर इंस्टॉलेशन

macOS और Windows पर, पहले आपको Podman Desktop सेटअप करना होगा या podman machine से Linux VM बनानी होगी। जब वह चलने लगे, तो उसी एनवायरनमेंट के अंदर pip के माध्यम से Podman Compose इंस्टॉल करें।

तो पहला कदम है मशीन से कनेक्ट करना:

podman machine ssh

Podman VM में SSH करना

Podman VM में SSH करना

क्योंकि VM Fedora-आधारित है, आप Podman Compose इंस्टॉल करने के लिए यह कमांड चला सकते हैं:

sudo dnf install podman-compose

Podman Compose इंस्टॉल करना

Podman Compose इंस्टॉल करना

यह दो-चरणीय प्रक्रिया दर्शाती है कि आप Podman Compose अपने होस्ट OS पर सीधे नहीं, बल्कि Podman द्वारा बनाई गई Linux VM के अंदर चला रहे हैं।

इंस्टॉलेशन की जाँच

यह कमांड चलाकर जाँचें कि Podman Compose सही इंस्टॉल हुआ है या नहीं:

podman-compose --version

Podman Compose इंस्टॉलेशन की जाँच

Podman Compose इंस्टॉलेशन की जाँच

आपको टर्मिनल पर वर्ज़न नंबर दिखना चाहिए। यदि "command not found" त्रुटि मिले, तो सुनिश्चित करें कि आपका Python bin डायरेक्टरी PATH में है।

Podman Compose उपयोग करना शुरू करने के लिए बस इतना ही पर्याप्त है।

Podman Compose के साथ Compose फ़ाइल चलाना

अब जब Podman Compose इंस्टॉल हो चुका है—आइए देखें कि एक वास्तविक एप्लिकेशन कैसे चलाएँ।

मौजूदा Docker Compose फ़ाइल का उपयोग

Podman Compose मानक docker-compose.yml फ़ाइलें पढ़ता है। आपको कुछ भी रीनेम या फ़ॉर्मैट बदलने की ज़रूरत नहीं।

यहाँ Compose फ़ाइल में परिभाषित एक सरल FastAPI एप्लिकेशन है:

services:
  web:
    image: python:3.14-slim
    container_name: fastapi-app
    working_dir: /src
    volumes:
      - ./src:/src
    ports:
      - "8000:8000"
    command: bash -c "pip install fastapi uvicorn && uvicorn main:app --host 0.0.0.0 --port 8000"

एप्लिकेशन कोड src/main.py में है:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello from FastAPI"}

@app.get("/health")
def health_check():
    return {"status": "healthy"}

ज़्यादातर Docker Compose फीचर्स Podman Compose के साथ सीधे काम करते हैं। इनमें शामिल हैं:

  • इमेज पुल करना और कंटेनर बनाना
  • पोर्ट मैपिंग
  • वॉल्यूम माउंट्स (नेम्ड वॉल्यूम्स और बाइंड माउंट्स दोनों)
  • एनवायरनमेंट वेरिएबल्स
  • सेवाओं के बीच बेसिक नेटवर्किंग

लेकिन कुछ फीचर्स में समायोजन चाहिए। यदि आपकी Compose फ़ाइल Docker-विशिष्ट प्लगइन्स, कस्टम नेटवर्क ड्राइवर्स, या एडवांस्ड बिल्ड आर्ग्युमेंट्स इस्तेमाल करती है, तो संभवतः आपको उन हिस्सों में बदलाव करने होंगे।

Podman Compose नेटवर्किंग को अलग तरीके से संभालता है—सेवाएँ एक-दूसरे को सर्विस नेम से उसी तरह ऑटोमैटिकली रेज़ॉल्व नहीं करतीं जैसे Docker Compose में होता है।

बेसिक Podman Compose कमांड्स

अब आप यह कमांड चलाकर अपनी सेवाएँ स्टार्ट कर सकते हैं:

podman-compose up

यह इमेजेज़ पुल करता है, कंटेनर्स बनाता है, और आपकी Compose फ़ाइल में परिभाषित सब कुछ शुरू करता है। यदि आप टर्मिनल पर लॉग्स स्ट्रीम नहीं करना चाहते, तो -d जोड़कर डिटैच्ड मोड में चलाएँ।

Podman आउटपुट

Podman आउटपुट

अब आप अपनी मशीन पर (या मेरे जैसे किसी रिमोट Ubuntu इंस्टेंस पर) पोर्ट 8000 पर ऐप खोल सकते हैं। आपको यह दिखाई देगा:

Podman के माध्यम से चल रही FastAPI एप्लिकेशन

Podman के माध्यम से चल रही FastAPI एप्लिकेशन

चल रही सेवाओं को रोकने के लिए यह चलाएँ:

podman-compose down

यह कंटेनर्स को रोककर हटा देता है। वॉल्यूम्स तब तक बने रहते हैं जब तक आप उन्हें हटाने के लिए --volumes नहीं जोड़ते।

अपनी सर्विस लॉग्स देखने के लिए यह कमांड चलाएँ:

podman-compose logs

रीयल-टाइम में लॉग्स फॉलो करने के लिए -f जोड़ें, या सिर्फ किसी एक कंटेनर के लॉग्स देखने के लिए सर्विस नाम दें।

सब कुछ साफ करने के लिए—जिसमें कंटेनर्स, नेटवर्क्स, और वॉल्यूम्स शामिल हैं—यह चलाएँ:

podman-compose down --volumes

कमांड्स Docker Compose सिंटैक्स से मेल खाते हैं, तो यदि आप docker-compose से परिचित हैं, तो सब कुछ अपना-सा लगेगा।

Podman Compose बनाम Docker Compose और अन्य

Podman Compose और Docker Compose का लक्ष्य एक जैसा है, लेकिन अंदरूनी कामकाज अलग है। आइए समझते हैं कैसे।

रूटलेस निष्पादन

Docker Compose को रूट के रूप में चल रहे Docker डेमन की ज़रूरत होती है। भले ही आप रूटलेस कंटेनर्स कॉन्फ़िगर करें, डेमन को उच्चाधिकार चाहिए। Podman Compose पूरी तरह बिना रूट एक्सेस के डिफ़ॉल्ट रूप से चलता है। आपके कंटेनर्स सिस्टम सर्विस की बजाय आपके यूज़र के रूप में शुरू होते हैं, जिससे अटैक सरफेस कम होता है और मल्टी-यूज़र एनवायरनमेंट्स में सुरक्षा बढ़ती है।

नेटवर्किंग व्यवहार

Docker Compose आपकी सेवाओं के लिए एक डिफ़ॉल्ट ब्रिज नेटवर्क बनाता है। कंटेनर्स सर्विस नेम से एक-दूसरे तक स्वतः पहुँच सकते हैं।

Podman Compose की जगह पॉड-आधारित नेटवर्किंग का उपयोग करता है। आपकी Compose फ़ाइल के सभी कंटेनर्स एक सिंगल Podman पॉड में ग्रुप हो जाते हैं और वही नेटवर्क नेमस्पेस साझा करते हैं। इसका मतलब है कि कंटेनर्स सर्विस नेम्स की बजाय localhost के माध्यम से संवाद करते हैं—जो Docker उपयोगकर्ताओं के लिए चौंकाने वाला हो सकता है।

यदि आपका ऐप db:5432 पर डेटाबेस से कनेक्ट होने की उम्मीद करता है, तो Podman Compose के साथ चलते समय इसे localhost:5432 में बदलना होगा।

पॉड-आधारित ग्रुपिंग

Docker Compose अलग-अलग कंटेनर्स मैनेज करता है। Podman Compose एक पॉड बनाता है—यह Kubernetes से प्रेरित समूह है जहाँ कंटेनर्स नेटवर्किंग साझा करते हैं और स्टोरेज भी साझा कर सकते हैं। यह पॉड मॉडल Podman Compose को Kubernetes पैटर्न्स के क़रीब लाता है, जिससे भविष्य में ऑर्केस्ट्रेशन की ज़रूरत पड़े तो माइग्रेशन आसान होता है।

systemd इंटीग्रेशन

Podman कंटेनर्स को सिस्टम सर्विसेज़ की तरह मैनेज करने के लिए systemd के साथ इंटीग्रेट होता है। आप रनिंग कंटेनर्स से systemd यूनिट फाइलें जेनरेट कर सकते हैं और उन्हें किसी भी Linux सर्विस की तरह मैनेज कर सकते हैं। Docker कंटेनर स्तर पर नैटिव systemd इंटीग्रेशन नहीं देता।

अन्य विकल्प

यदि Podman Compose आपकी ज़रूरत के अनुरूप नहीं है, तो ये विकल्प मौजूद हैं:

  • नेटिव Podman with systemd आपको बिना Compose फ़ाइलों के ही कंटेनर्स को सर्विसेज़ के रूप में मैनेज करने देता है
  • Kubernetes बड़े पैमाने के प्रोडक्शन वर्कलोड्स के लिए फुल ऑर्केस्ट्रेशन देता है, हालाँकि यह Compose-जैसे टूल्स से कहीं अधिक भारी है

Podman Compose साधारण कंटेनर कमांड्स और फुल ऑर्केस्ट्रेशन के बीच कहीं आता है। यह Docker के डेमन की आवश्यकता के बिना मल्टी-कंटेनर वर्कफ़्लो देता है।

Podman Compose में नेटवर्किंग और वॉल्यूम्स (क्या अलग है)

Docker से Podman Compose पर आते समय उपयोगकर्ता आमतौर पर दो बातों की शिकायत करते हैं: नेटवर्किंग और वॉल्यूम्स। इस खंड में, मैं इन अंतरों पर चर्चा करूँगा।

सेवा-से-सेवा संचार

Docker Compose में, आप अन्य सेवाओं से उनके सर्विस नेम के माध्यम से कनेक्ट होते हैं। यदि आपके पास एक वेब सर्विस और db नाम की डेटाबेस सर्विस है, तो आपका ऐप db:5432 से कनेक्ट करता है।

Podman Compose सभी सेवाओं को एक ही पॉड में रखता है। एक ही पॉड के कंटेनर्स नेटवर्क नेमस्पेस साझा करते हैं, यानी वे सब localhost का उपयोग करते हैं। आपकी डेटाबेस कनेक्शन स्ट्रिंग db:5432 से localhost:5432 में बदल जाती है।

यह अक्सर लोगों को चौंका देता है। आपका ऐप स्टार्ट होता है, db:5432 से कनेक्ट करने की कोशिश करता है, और असफल रहता है क्योंकि वह होस्टनेम रेज़ॉल्व नहीं होता। आपको अपनी कनेक्शन स्ट्रिंग्स या एनवायरनमेंट वेरिएबल्स को localhost पर अपडेट करना होगा।

डिफ़ॉल्ट नेटवर्क्स

Docker Compose आपकी सेवाओं के लिए एक ब्रिज नेटवर्क बनाता है। प्रत्येक कंटेनर को उस नेटवर्क पर अपना IP पता मिलता है, और Docker का DNS रेज़ॉल्वर सर्विस नेम लुकअप संभालता है।

Podman Compose डिफ़ॉल्ट रूप से अलग-अलग नेटवर्क्स नहीं बनाता। पॉड मॉडल का मतलब है कि कंटेनर्स निचले स्तर पर नेटवर्किंग साझा करते हैं। यदि आप Compose फ़ाइल में कस्टम नेटवर्क्स परिभाषित करते हैं, तो Podman Compose उन्हें बनाने की कोशिश करेगा, लेकिन व्यवहार Docker से पूरी तरह मेल नहीं भी खा सकता।

वॉल्यूम और बाइंड माउंट व्यवहार

वॉल्यूम्स और बाइंड माउंट्स अधिकतर मामलों में Docker Compose और Podman Compose के बीच समान ही काम करते हैं। आप उन्हें Compose फ़ाइल में परिभाषित करते हैं, और Podman उन्हें बना देता है।

लेकिन परमिशन से जुड़ी एक बात ध्यान देने योग्य है।

Podman डिफ़ॉल्ट रूप से रूटलेस चलता है, इसलिए फ़ाइल ओनरशिप और परमिशन्स अलग तरह से व्यवहार कर सकते हैं। जो बाइंड माउंट Docker में ठीक चलता था, वह Podman में परमिशन एरर्स दे सकता है क्योंकि कंटेनर यूज़र आपके होस्ट यूज़र के UID से मैच नहीं करता।

आप वॉल्यूम लोकेशन्स में भी अंतर देखेंगे। Docker वॉल्यूम्स को /var/lib/docker/volumes/ में स्टोर करता है, जबकि Podman रूटलेस कंटेनर्स के लिए उन्हें ~/.local/share/containers/storage/volumes/ में स्टोर करता है।

यदि आपको पता हो कि क्या हो रहा है, तो इनके समाधान सरल हैं। यानी नेटवर्किंग के लिए कनेक्शन स्ट्रिंग्स समायोजित करें, और वॉल्यूम संबंधी समस्याओं के लिए फ़ाइल परमिशन्स जाँचें।

आम सीमाएँ और ध्यान देने योग्य बातें

Podman Compose बुनियादी मल्टी-कंटेनर सेटअप्स के लिए अच्छा काम करता है, लेकिन इसे अपनाने से पहले इसकी कुछ सीमाएँ जानना उपयोगी है।

असमर्थित Compose फीचर्स

हर Docker Compose फीचर Podman Compose में अनुवादित नहीं हो पाता। जटिल आर्ग्युमेंट्स वाले बिल्ड कॉन्टेक्स्ट अक्सर फेल हो जाते हैं या अलग तरीके से व्यवहार करते हैं। Docker Compose प्लगइन्स और एक्सटेंशन्स बिल्कुल काम नहीं करेंगे। GPU पासथ्रू, एडवांस्ड हेल्थ चेक्स, और कुछ नेटवर्किंग मोड्स जैसे फीचर्स या तो काम नहीं करते या वर्कअराउंड चाहते हैं।

यदि आपकी Compose फ़ाइल docker-compose.yml के 3.x वर्ज़न फीचर्स पर बहुत निर्भर है, तो कुछ ट्रायल-एंड-एरर की उम्मीद रखें।

Docker से अलग नेटवर्किंग अपेक्षाएँ

सेवाएँ सर्विस नेम से संवाद नहीं करतीं—वे इसकी बजाय localhost का उपयोग करती हैं। यह उन ऐप्स को तोड़ देता है जिनमें कनेक्शन स्ट्रिंग्स में सर्विस नेम हार्ड-कोडेड हैं।

कस्टम ब्रिज नेटवर्क्स Docker की तरह व्यवहार नहीं करते। पॉड मॉडल के कारण DNS रेज़ॉल्यूशन अलग तरह से काम करता है।

Podman की नेटवर्किंग के मुताबिक कॉन्फ़िग्स और एनवायरनमेंट वेरिएबल्स अपडेट करने में थोड़ा समय लगेगा, लेकिन यह एक बार का काम है।

macOS/Windows पर प्लेटफ़ॉर्म सीमाएँ

Podman Compose Linux पर सबसे अच्छा चलता है। macOS और Windows पर आप सब कुछ Linux VM के अंदर चला रहे होते हैं, जो जटिलता बढ़ाता है। होस्ट और VM के बीच फ़ाइल सिंकिंग धीमी हो सकती है। होस्ट और कंटेनर्स के बीच नेटवर्किंग के लिए अतिरिक्त कॉन्फ़िगरेशन चाहिए।

यदि आपकी टीम डेवलपमेंट के लिए macOS या Windows मशीनें उपयोग करती है, तो Docker Compose आमतौर पर अधिक सहज विकल्प होता है।

टूल की परिपक्वता और इकोसिस्टम गैप्स

Podman Compose, Docker Compose से नया है। कम्युनिटी छोटी है, इसलिए विशिष्ट समस्याओं के जवाब ढूँढने में अधिक मेहनत लग सकती है। थर्ड-पार्टी टूल्स और इंटीग्रेशन्स पहले Docker के लिए बनते हैं, Podman के लिए बाद में (या कभी नहीं)। IDE सपोर्ट और GUI टूल्स भी Docker इकोसिस्टम से पीछे हैं।

Podman Compose से जुड़ी समस्याओं पर आपको Stack Overflow उत्तर या GitHub Issues कम मिलेंगे।

ये सीमाएँ Podman Compose को अनुपयोगी नहीं बनातीं, लेकिन अपनाने से पहले विचार करने योग्य हैं। Docker Compose उपयोगकर्ताओं को ये रुकावटें नहीं झेलनी पड़तीं।

Podman Compose उपयोग के लिए सर्वोत्तम तरीके

सबसे आम Podman Compose समस्याओं से बचने के लिए ये उपाय अपनाएँ।

  • सरल Compose फ़ाइलों से शुरुआत करें। अपनी सबसे जटिल Docker सेटअप को पहले माइग्रेट न करें। एक सिंगल-सर्विस ऐप से शुरू करें, काम करता दिखे तो और सेवाएँ जोड़ें। इससे समस्याएँ आते ही अलग-थलग करके समझ पाते हैं।

  • रूटलेस नेटवर्किंग को जल्दी टेस्ट करें। एक मल्टी-सर्विस ऐप स्पिन अप करें और जाँचें कि कंटेनर्स localhost पर संवाद कर सकते हैं। अपनी कनेक्शन स्ट्रिंग्स सर्विस नेम्स से बदलकर localhost करें। यदि नेटवर्किंग अपेक्षा के अनुसार नहीं चलती, तो तुरंत पता चल जाएगा।

  • वॉल्यूम्स और पोर्ट्स को स्पष्ट रूप से परिभाषित करें। डिफॉल्ट्स पर निर्भर न रहें। बाइंड माउंट्स के लिए फुल पाथ्स दें। पोर्ट मैपिंग्स परिभाषित करें। यदि आप होस्ट डायरेक्टरीज़ माउंट कर रहे हैं, तो फ़ाइल परमिशन्स स्पष्ट रूप से सेट करें। Podman के रूटलेस मॉडल में Docker में काम कर चुकीं धारणाएँ यहाँ विफल हो सकती हैं।

  • Podman Compose का उपयोग मुख्यतः डेवलपमेंट और हल्के प्रोडक्शन के लिए करें। यह लोकल डेव एनवायरनमेंट्स और छोटे डिप्लॉयमेंट्स को अच्छे से संभालता है। बड़े पैमाने के प्रोडक्शन के लिए Kubernetes या अन्य ऑर्केस्ट्रेशन प्लेटफ़ॉर्म उपयुक्त हैं। Podman Compose हाई-अवेलेबिलिटी क्लस्टर्स या जटिल सर्विस मेषों के लिए नहीं बना है।

निष्कर्ष

Podman Compose आपको Docker की बजाय Podman के साथ मल्टी-कंटेनर एप्लिकेशंस चलाने का व्यावहारिक तरीका देता है। यह आपकी मौजूदा Compose फ़ाइलें पढ़ता है और उन्हें Podman कमांड्स में अनुवाद करता है, इसलिए आपको बिल्कुल नया वर्कफ़्लो सीखने की ज़रूरत नहीं। लेकिन यह Docker Compose की परफेक्ट कॉपी नहीं है। नेटवर्किंग अलग तरह से काम करती है, कुछ फीचर्स सपोर्टेड नहीं हैं, और आपको Podman के पॉड-आधारित मॉडल के अनुसार कनेक्शन स्ट्रिंग्स और कॉन्फ़िग्स समायोजित करने होंगे।

अंत में, मैं सलाह दूँगा कि आप Docker और Podman के बीच के अंतर पर और पढ़ें, ताकि उनकी आर्किटेक्चरल अप्रोच और कम्पैटिबिलिटी को बेहतर समझ सकें।

Dario Radečić

लेखक

Dario Radečić

क्रोएशिया में स्थित सीनियर डेटा साइंटिस्ट। 700 से अधिक प्रकाशित लेखों के साथ टॉप टेक राइटर, जिनसे 10M+ व्यूज़ प्राप्त हुए। Machine Learning Automation with TPOT के पुस्तक लेखक।

Docker Compose FAQs

Podman Compose क्या है?

Podman Compose एक Python-आधारित टूल है जो Docker Compose फ़ाइलों को पढ़कर उन्हें Podman कमांड्स में अनुवाद करता है। यह आपको Docker के बजाय Podman का उपयोग करके मल्टी-कंटेनर एप्लिकेशंस चलाने देता है, जिससे बिना डेमन या रूट प्रिविलेज के वही Compose वर्कफ़्लो मिल जाता है।

क्या मैं Docker Compose फ़ाइलें Podman Compose के साथ उपयोग कर सकता/सकती हूँ?

हाँ, Podman Compose मानक docker-compose.yml फ़ाइलें पढ़ता है। ज़्यादातर बेसिक Docker Compose फीचर्स सीधे काम करते हैं, हालाँकि Podman के पॉड-आधारित नेटवर्किंग मॉडल के कारण आपको सर्विस नेम्स से कनेक्शन स्ट्रिंग्स को बदलकर localhost करना होगा।

Podman Compose और Docker Compose में मुख्य अंतर क्या है?

Podman Compose डिफ़ॉल्ट रूप से रूटलेस चलता है और डेमन की आवश्यकता नहीं होती, जबकि Docker Compose को रूट पर चल रहे Docker डेमन की ज़रूरत होती है। Podman Compose पॉड-आधारित नेटवर्किंग का उपयोग करता है, जहाँ कंटेनर्स localhost साझा करते हैं, जबकि Docker Compose में प्रत्येक सर्विस का अपना होस्टनेम होता है।

Podman Compose उपयोग करते समय मेरी सेवाएँ कनेक्ट क्यों नहीं हो पा रही हैं?

Podman Compose सभी सेवाओं को एक ही पॉड में रखता है जो एक नेटवर्क नेमस्पेस साझा करता है, इसलिए कंटेनर्स सर्विस नेम्स की बजाय localhost के माध्यम से संवाद करते हैं। आपको अपनी एप्लिकेशन कॉन्फ़िग्स में db:5432 जैसी कनेक्शन स्ट्रिंग्स को localhost:5432 में बदलना होगा।

क्या Podman Compose macOS और Windows पर काम करता है?

हाँ, लेकिन पहले आपको Podman Desktop या podman machine का उपयोग करके Podman को Linux VM के अंदर चलाना होगा। यह Linux की तुलना में जटिलता बढ़ाता है, और फ़ाइल सिंकिंग धीमी होने व नेटवर्किंग से जुड़े मसलों की आशंका रहती है।

विषय