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

कंटेनर बनाने, चलाने और प्रबंधित करने के लिए शीर्ष 18 Docker कमांड

यह गाइड ज़रूरी Docker कमांड्स—कंटेनर की बुनियाद से लेकर वॉल्यूम्स और नेटवर्किंग तक—को समझने में मदद करता है ताकि आप अलग-अलग वातावरणों में आत्मविश्वास से एप्लिकेशन मैनेज कर सकें!
Laiba Siddiqui
Laiba Siddiqui

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखेंजारी रखकर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा USA में संग्रहीत है।

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

इस गाइड में, मैं आपको 18 ज़रूरी Docker कमांड्स—इमेजेज़, कंटेनर्स, नेटवर्किंग, वॉल्यूम्स और Compose—के बारे में बताऊंगा, जो आपके वर्कफ़्लो को बेहतर बनाएंगे और Docker के साथ काम को और स्मूद व कुशल बना देंगे।

Docker क्या है?

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

Docker ऐप्स को आइसोलेटेड एनवायरनमेंट्स में हल्के पैकेजों, जिन्हें कंटेनर्स कहा जाता है, की मदद से चलाता है। इनमें ऐप को चलाने के लिए ज़रूरी सब कुछ शामिल होता है—जैसे डिपेंडेंसीज़ और इंस्टॉलेशंस—जो सिस्टम संसाधनों की बचत में मदद करता है। हम कंटेनरों को टीममेट्स के साथ आसानी से साझा कर सकते हैं, कई कंटेनर एक साथ चला सकते हैं और Docker के टूल्स व प्लेटफ़ॉर्म से उन्हें मैनेज कर सकते हैं।

हम Docker का उपयोग कई चीज़ों के लिए कर सकते हैं, जिनमें शामिल हैं:

  • तेज़ डिप्लॉयमेंट और स्केलिंग।
  • उसी हार्डवेयर पर ज़्यादा वर्कलोड्स चलाना।
  • एप्लिकेशन की तेज़ और सुसंगत डिलीवरी।

Docker का उपयोग करते समय, हम अलग-अलग Docker ऑब्जेक्ट्स जैसे इमेजेज़, कंटेनर्स, नेटवर्क्स, प्लगइन्स और वॉल्यूम्स के साथ काम करते हैं। ये Docker सेटअप के बिल्डिंग ब्लॉक्स हैं। अंदरूनी तौर पर, Docker यह सब संभव बनाने के लिए Linux कर्नेल की विशेषताओं का उपयोग करता है। हम टर्मिनल में सरल कमांड्स से इसके साथ इंटरैक्ट करते हैं, और हर Docker कमांड docker से शुरू होती है।

> यदि आप अभी शुरुआत कर रहे हैं, तो Introduction to Docker कॉर्स कंटेनराइज़ेशन की बुनियाद सीखने के लिए एक व्यावहारिक आधार देता है।

बेसिक Docker कमांड्स

अब जब हमने समझ लिया कि Docker क्या है और कैसे काम करता है, तो आइए सबसे आम कमांड्स पर नज़र डालते हैं। ये आपको रोज़मर्रा के वर्कफ़्लो में कंटेनर बनाने, चलाने और मैनेज करने में मदद करेंगे।

docker --version और docker info

Docker कमांड्स में, जो भी -- से शुरू होता है, उसे फ़्लैग कहा जाता है। 

उदाहरण के लिए, --version एक फ़्लैग है जो बताता है कि आप कौन-सा Docker CLI वर्ज़न इस्तेमाल कर रहे हैं। आप docker version (बिना फ़्लैग) भी चला सकते हैं ताकि सभी Docker कंपोनेंट्स की डिटेल्ड वर्ज़न जानकारी मिल सके। 

आउटपुट दो भागों में बंटा होता है:

  • Client में Docker CLI और संबंधित टूल्स की जानकारी होती है।
  • Server में Docker Engine और जिस पर यह चलता है, उसकी डिटेल्स दिखती हैं।

आप --format फ़्लैग और कस्टम टेम्पलेट का उपयोग करके इस आउटपुट को फ़ॉर्मैट भी कर सकते हैं।

docker info कमांड आपके Docker सेटअप का पूरा ओवरव्यू देता है। यह docker system info चलाने जैसा ही है, बस नाम छोटा है। आपको कर्नेल वर्ज़न, कंटेनर और इमेज की संख्या, और अन्य सिस्टम-स्तरीय डिटेल्स दिखेंगी। 

आपके स्टोरेज ड्राइवर के आधार पर, आपको पूल नाम और डेटा फ़ाइल्स जैसी जानकारी भी दिख सकती है। docker version की तरह, आप --format या -f से आउटपुट को फ़ॉर्मैट कर सकते हैं।

docker pull <image>

pull कमांड किसी रजिस्ट्री से Docker इमेज डाउनलोड करता है, आम तौर पर Docker Hub से—एक पब्लिक लाइब्रेरी जिसमें पहले से बनी इमेजेज़ होती हैं जिनका आप बिना कुछ सेटअप किए इस्तेमाल कर सकते हैं। आप इसे docker pull <image> या docker pull दोनों तरह से चला सकते हैं—दोनों एक जैसा काम करेंगे।

  • पूरा सिंटैक्स इस तरह दिखता है: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

यदि आप कोई टैग नहीं देते, तो Docker डिफ़ॉल्ट रूप से :latest इस्तेमाल करता है। उदाहरण के लिए: docker image pull debian debian:latest इमेज पुल करता है।

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

docker pull कमांड के विकल्प

docker pull कमांड के विकल्प। स्रोत: Docker docs

docker run <image>

docker run <image> कमांड किसी निर्दिष्ट इमेज से नया कंटेनर बनाता और स्टार्ट करता है, यानी इमेज को फ़्रेश कंटेनर में रन करता है। यह docker container run का शॉर्टहैंड है, और दोनों एक ही तरह काम करते हैं।

  • बेसिक सिंटैक्स: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

यदि आपने पहले कोई कंटेनर चलाया है और उसकी सारी पिछली चेंजेज़ के साथ उसे दोबारा स्टार्ट करना चाहते हैं, तो इस्तेमाल करें: docker start <container>।

run कमांड में कई विकल्प होते हैं जिनसे आप कंटेनर के रन होने का तरीक़ा कस्टमाइज़ कर सकते हैं। नीचे कुछ आम विकल्प उदाहरण सहित दिए गए हैं:

फ़्लैग

कमांड उदाहरण

विवरण

-- name

docker run --name test -d nginx:alpine

निर्दिष्ट कस्टम आइडेंटिफ़ायर के साथ nginx:alpine इमेज से test नामक कंटेनर बनाता है।

-w,--workdir

docker run -w /path/to/dir/ -i -t ubuntu pwd

कमांड को दिए गए डायरेक्टरी के अंदर एग्जीक्यूट करता है, इस उदाहरण में /path/to/dir/

--pid

docker run --rm -it --pid=host alpine

डिफ़ॉल्ट रूप से सभी कंटेनरों में PID namespace सक्षम होता है, जो प्रोसेसेज़ का पृथक्करण प्रदान करता है।

उदाहरण में --pid = host विकल्प के साथ एक alpine कंटेनर रन किया गया है।

--cidfile

docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"

यह एक कंटेनर बनाता है और कंसोल पर test प्रिंट करता है।

cidfile फ़्लैग Docker को एक नई फ़ाइल बनाने और उसमें कंटेनर ID लिखने का प्रयास करने को कहता है।

docker stop <container> और docker start <container>:

docker start <container> कमांड एक या एक से अधिक रुके हुए कंटेनरों को स्टार्ट करता है। उदाहरण के लिए, docker start my_container में my_container उस कंटेनर का नाम है जिसे हमें स्टार्ट करना है। इसका एक एलियस भी है: docker container start।

  • पूरा सिंटैक्स: docker container start [OPTIONS] CONTAINER [CONTAINER...]

इसी तरह, docker stop एक या अधिक चल रहे कंटेनरों को रोकता है। उदाहरण के लिए, docker stop my_container में my_container चल रहे कंटेनर का नाम है।

इसका भी एक एलियस है: docker container stop। 

  • पूरा सिंटैक्स इस प्रकार है: docker container stop [OPTIONS] CONTAINER [CONTAINER...]

start की तरह, stop कमांड में भी विकल्प हैं जिनसे आप कंटेनरों को कैसे रोका जाए, इसे कस्टमाइज़ कर सकते हैं। आगे हम कुछ उपयोगी विकल्पों पर रोशनी डालेंगे:

docker stop कमांड के विकल्प

docker stop के विकल्प। स्त्रोत: Docker docs

Docker इमेजेज़ के साथ काम करना

हर कंटेनर की नींव इमेज होती है। इस सेक्शन में, हम कॉमन कमांड्स के ज़रिए Docker इमेजेज़ को बनाना, मैनेज करना और इंस्पेक्ट करना सीखेंगे।

docker build

docker build कमांड Docker की सबसे ज़्यादा इस्तेमाल की जाने वाली फ़ीचर्स में से एक है। जबकि यह उन्नत उपयोग मामलों का समर्थन करने वाले व्यापक इकोसिस्टम का हिस्सा है, हम यहाँ एक सरल Dockerfile से इमेज बनाने पर फोकस करेंगे। 

Dockerfile एक सादा टेक्स्ट फ़ाइल (कोई एक्सटेंशन नहीं) है जिसमें स्टेप-बाय-स्टेप निर्देश होते हैं जिनका उपयोग Docker इमेज बनाने के लिए करता है। इसे इस तरह बनाएँ:

  1. अपनी ऐप की रूट डायरेक्टरी में Dockerfile नामक फ़ाइल बनाएँ और इसमें निम्न सामग्री डालें:
# syntax=docker/dockerfile:1

FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

यह Dockerfile Node.js और Yarn के साथ एक हल्की बेस इमेज से शुरू होता है। यह आपकी ऐप का सोर्स कोड इमेज में कॉपी करता है, डिपेंडेंसीज़ इंस्टॉल करता है और ऐप स्टार्ट करने का तरीक़ा निर्धारित करता है।

  1. अब, निम्न कमांड से इमेज बनाएं:
docker build -t getting-started.

-t फ़्लैग से आप इमेज को टैग कर सकते हैं। यहाँ हमने इसे getting-started. नाम दिया है। अंत में दिया गया . Docker को बताता है कि Dockerfile वर्तमान डायरेक्टरी में ढूँढें।

docker images

docker images कमांड आपके सभी टॉप-लेवल इमेजेज़, उनके रिपोज़िटरी, टैग्स और साइज़ की सूची देता है। इसके एलियस भी हैं:

  • docker image list
  • docker image ls

इसका सिंटैक्स है: docker image ls [OPTIONS] [REPOSITORY[:TAG]]

यह कमांड कई विकल्प सपोर्ट करता है। उदाहरण के लिए, सभी इमेजेज़ दिखाने के लिए, जिनमें इंटरमीडिएट इमेजेज़ भी शामिल हैं, आप -a या --all फ़्लैग जोड़ सकते हैं: docker images -a।

docker rmi <image>

docker rmi <image> कमांड आपके सिस्टम से एक या अधिक इमेजेज़ हटाता है। यदि किसी इमेज पर कई टैग हैं, तो किसी विशेष टैग के साथ यह कमांड चलाने पर केवल वह टैग हटेगा। लेकिन यदि वह टैग इमेज से जुड़ा एकमात्र टैग है, तो टैग और इमेज—दोनों हट जाएंगे।

इसके एलियस इस प्रकार हैं:

  • docker image remove
  • docker image rm

इसका सिंटैक्स: docker image rm [OPTIONS] IMAGE [IMAGE...]

यदि आपको किसी ऐसी इमेज को हटाना है जिसे कोई रनिंग कंटेनर उपयोग कर रहा है, तो आपको -f या --force विकल्प जोड़कर फ़ोर्स करना होगा।

Docker कंटेनर मैनेजमेंट

हमें अक्सर कंटेनर मैनेज करने पड़ते हैं—जैसे ऐप के विकसित होने के साथ उन्हें स्टार्ट, स्टॉप, इंस्पेक्ट या रिमूव करना। इसलिए, मैं आपको रोज़मर्रा के वर्कफ़्लो में कंटेनरों को संभालने के लिए सबसे उपयोगी Docker कमांड्स के बारे में बताऊँगा।

docker exec <container> <command>

docker exec कमांड आपको किसी रनिंग कंटेनर के अंदर बिना उसे रीस्टार्ट किए कोई कमांड चलाने देता है। यह डीबगिंग या कंटेनर के अंदर मैन्युअल रूप से कुछ जाँचने के लिए विशेष रूप से उपयोगी है। इसका एलियस: docker container exec।

यह कमांड तभी काम करता है जब कंटेनर की मुख्य प्रक्रिया (PID 1) चल रही हो। कंटेनर रीस्टार्ट होने पर यह अपने-आप दोबारा नहीं चलता।

इसका सिंटैक्स है: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

इसके साथ कई वैकल्पिक फ़्लैग इस्तेमाल किए जा सकते हैं। उदाहरण के लिए, --privileged कंटेनर के अंदर कमांड को विस्तृत अनुमतियाँ देता है। सभी विकल्पों की पूरी सूची के लिए आधिकारिक डॉक्यूमेंटेशन देखें।

कंटेनर पर कमांड एग्जीक्यूट करने का एक उदाहरण:

docker exec -d mycontainer touch /tmp/execWorks

touch कमांड रनिंग कंटेनर mycontainer के अंदर बैकग्राउंड में /tmp/execWorks नाम की नई फ़ाइल बनाता है।

docker logs <container>

docker logs कमांड किसी विशेष कंटेनर के लॉग्स दिखाता है और एग्जीक्यूशन के समय स्टैंडर्ड आउटपुट और एरर पर प्रिंट हुई सारी चीज़ें प्रदर्शित करता है। इसका एलियस: docker container logs

इसका सिंटैक्स: docker container logs [OPTIONS] CONTAINER

इसके साथ कई उपयोगी विकल्प जोड़ सकते हैं। जैसे:

  • --details एनवायरनमेंट वेरिएबल्स और लेबल्स जैसी अतिरिक्त एट्रीब्यूट्स दिखाता है।
  • --until आपको किसी विशेष समय तक के लॉग्स फ़ेच करने देता है।
  • docker logs -f --until=2s test test कंटेनर के लॉग आउटपुट को फ़ॉलो करता है और आख़िरी दो सेकंड के लॉग्स दिखाने के बाद रुक जाता है।

यहाँ वे सभी विकल्प हैं जिन्हें हम docker logs के साथ इस्तेमाल कर सकते हैं:

docker log <container> के विकल्प

docker log <container> के विकल्प। स्त्रोत: Docker docs

docker rm <container>

docker rm <container> कमांड आपके सिस्टम से एक या अधिक कंटेनर हटाता है। इसके एलियस हैं:

  • docker container remove
  • docker container rm

इसका सिंटैक्स: docker container rm [OPTIONS] CONTAINER [CONTAINER...]

इस कमांड के कुछ वैकल्पिक फ़्लैग भी हैं। कुछ निम्न हैं:

docker rm <container> के विकल्प

docker rm <container> के विकल्प। स्रोत: Docker docs

उदाहरण के लिए, आप docker rm /redis का उपयोग उस कंटेनर को हटाने के लिए कर सकते हैं जिसे /redis लिंक से पहचाना जाता है। हालाँकि, ध्यान दें कि यह कमांड केवल रनिंग कंटेनरों को हटाता है। 

यदि आप रुके हुए कंटेनरों को हटाना चाहते हैं, तो आपको docker container prune उपयोग करना होगा। अपना वातावरण साफ़ रखने के लिए, इस Docker prune ट्यूटोरियल से सीखें कि अप्रयुक्त Docker संसाधनों को सुरक्षित रूप से कैसे हटाएँ।

docker restart <container>

docker restart <container> कमांड एक या अधिक कंटेनरों को पहले रोकता है और फिर उन्हें रीस्टार्ट करता है। इसका एलियस: docker container restart। 

इसका सिंटैक्स: docker restart [OPTIONS] CONTAINER [CONTAINER...]

restart कमांड में कंटेनर रीस्टार्ट को कस्टमाइज़ करने के लिए कई उपयोगी विकल्प हैं। नीचे दोनों विकल्प दिए गए हैं, साथ में उदाहरण भी:

विकल्प

विवरण

उदाहरण

-s, --signal

कंटेनर को भेजा जाने वाला सिग्नल।

docker restart -s SIGTERM mycontainer

-t, --timeout

कंटेनर को kill करने से पहले प्रतीक्षा करने के सेकंड।

docker restart -t 10 mycontainer

> अभ्यास के लिए, इन Docker प्रोजेक्ट आइडियाज़ का पता लगाएँ—जो शुरुआती से एडवांस स्तर तक होते हैं।

Docker नेटवर्किंग

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

जब तक आप none नेटवर्क ड्राइवर (जो नेटवर्किंग को अक्षम करता है) का उपयोग नहीं करते, कंटेनर IP एड्रेस, गेटवे और DNS जैसे नेटवर्किंग एलिमेंट्स के साथ इंटरैक्ट कर सकते हैं। 

आइए कुछ आम docker नेटवर्किंग कमांड्स देखें जिनका आप उपयोग कर सकते हैं।

docker network ls

docker network ls कमांड Docker Engine को ज्ञात सभी नेटवर्क्स की सूची देता है, जिनमें क्लस्टर में कई होस्ट्स के नेटवर्क भी शामिल हैं। इसका एलियस है: docker network list।

  • इसका सिंटैक्स: docker network ls [OPTIONS]

आप इसके साथ कई विकल्प इस्तेमाल कर सकते हैं, जैसा कि नीचे की इमेज में दिखाया गया है: 

डिफ़ॉल्ट रूप से, यह कमांड हर नेटवर्क का यह दिखाता है:

  • ID
  • Name
  • Driver
  • Scope

आप फ़्लैग्स से आउटपुट कस्टमाइज़ कर सकते हैं। उदाहरण के लिए, --no-trunc फ़्लैग शॉर्ट किए हुए IDs की जगह पूरे नेटवर्क IDs दिखाता है। इस कमांड का उपयोग इस तरह करें:

docker network ls --no-trunc

docker network create <network-name>

docker network create कमांड एक नया Docker नेटवर्क बनाता है। डिफ़ॉल्ट रूप से यह bridge ड्राइवर उपयोग करता है, जब तक कि आप --driver (या -d) फ़्लैग से कोई और न बताएं।

Docker में निम्न बिल्ट-इन नेटवर्क ड्राइवर्स सपोर्टेड हैं:

  • bridge सिंगल-होस्ट नेटवर्क्स के लिए।
  • overlay Swarm मोड में मल्टी-होस्ट नेटवर्क्स के लिए।

आवश्यक होने पर आप थर्ड-पार्टी या कस्टम ड्राइवर्स भी इस्तेमाल कर सकते हैं।

  • बेसिक सिंटैक्स: docker network create [OPTIONS] NETWORK

इस कमांड में विभिन्न प्रयोजनों के लिए अनेक विकल्प हैं। पूरी सूची देखने के लिए उनके आधिकारिक डॉक्यूमेंटेशन पर नज़र डालें।

ब्रिज नेटवर्क बनाने का उदाहरण:

docker network create -d bridge my-bridge-network

ब्रिज नेटवर्क एक ही Docker Engine तक सीमित होते हैं, इसलिए वे अलग-अलग होस्ट्स के कंटेनरों को कनेक्ट नहीं कर पाएँगे।

Swarm मोड सक्षम होने पर, आप कई Docker होस्ट्स में फैला नेटवर्क बना सकते हैं:

docker network create --scope=swarm --attachable -d overlay my-multihost-network

> जानना चाहते हैं Docker और Kubernetes में क्या फर्क है? यह तुलना Kubernetes vs Docker की मुख्य भिन्नताएँ और उपयोग मामलों को कवर करती है।

Docker वॉल्यूम्स

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

वॉल्यूम्स होस्ट सिस्टम पर स्टोर होते हैं लेकिन होस्ट की कोर फ़ाइलों से आइसोलेटेड रहते हैं। इन्हें कंटेनरों में इस तरह माउंट किया जाता है जो bind mounts के समान है, लेकिन बेहतर पोर्टेबिलिटी और सुरक्षा के साथ। 

कुछ प्रासंगिक docker वॉल्यूम कमांड्स देखें: 

docker volume ls

docker volume ls कमांड उन सभी वॉल्यूम्स की सूची देता है जिनके बारे में Docker जानता है। इसका एलियस: docker volume list।

  • सिंटैक्स: docker volume ls [OPTIONS]

यह कमांड आउटपुट को फ़िल्टर या फ़ॉर्मैट करने में मदद के लिए कुछ वैकल्पिक फ़्लैग्स सपोर्ट करता है—ये रहे:

docker volume ls कमांड के विकल्प।

docker volume ls कमांड के विकल्प। स्त्रोत: Docker docs

docker volume create <volume-name>

docker volume create कमांड पर्सिस्टेंट डेटा स्टोर करने के लिए नया वॉल्यूम बनाता है। यदि आप नाम नहीं देते, तो Docker अपने-आप एक नाम जेनरेट कर देगा।

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

  • सिंटैक्स: docker volume create [OPTIONS] [VOLUME_NAME]

एक वॉल्यूम बनाने और फिर किसी कंटेनर को उसे इस्तेमाल करने के लिए कॉन्फ़िगर करने का उदाहरण:

docker volume create hello
docker run -d -v hello:/world busybox ls /world

इस उदाहरण में hello नाम का वॉल्यूम बनाया गया है। फिर, इसे कंटेनर में /world पाथ पर माउंट किया गया है। इससे कंटेनर उस वॉल्यूम से डेटा लिख/पढ़ सकता है।

कई कंटेनर एक ही वॉल्यूम का उपयोग कर सकते हैं, जो तब उपयोगी है जब एक कंटेनर डेटा लिखे और दूसरा उसे पढ़े।

नोट: वॉल्यूम नाम ड्राइवर्स के बीच यूनिक होने चाहिए। आप दो अलग स्टोरेज ड्राइवर्स में एक ही वॉल्यूम नाम का उपयोग नहीं कर सकते।

Docker Compose कमांड्स

Docker Compose बहु-कंटेनर एप्लिकेशन मैनेज करना आसान बनाता है—एक सरल YAML फ़ाइल के ज़रिए। यह डेवेलपमेंट, टेस्टिंग, स्टेजिंग, प्रोडक्शन और CI जैसे अलग-अलग वातावरणों को सपोर्ट करता है। एक ही कमांड से आप सर्विसेज़ कंट्रोल कर सकते हैं, नेटवर्क्स सेटअप कर सकते हैं और वॉल्यूम्स मैनेज कर सकते हैं—सब एक ही जगह।

कुछ आम compose कमांड्स देखें: 

docker-compose up

docker compose up कमांड किसी सर्विस के लिए कंटेनर्स को बिल्ड, (री)क्रिएट, स्टार्ट और उनसे अटैच करता है। यदि कंटेनर अभी तक रन नहीं हो रहे हैं, तो यह स्वतः लिंक्ड सर्विसेज़ को भी स्टार्ट कर देता है।

  • सिंटैक्स: docker compose up [OPTIONS] [SERVICE...]

डिफ़ॉल्ट रूप से, यह कमांड सभी कंटेनरों का आउटपुट जोड़ देता है। यदि आप विशेष सर्विसेज़ पर फ़ोकस करना चाहते हैं, तो आप:

  • कुछ सर्विसेज़ से अटैच होने के लिए --attach फ़्लैग का उपयोग करें
  • अन्य को छोड़ने के लिए --no-attach फ़्लैग का उपयोग करें

उदाहरण के लिए, docker compose up --no-attach <service-name> सभी सर्विसेज़ स्टार्ट करता है सिवाय उस सर्विस के जिसे आपने लॉग्स से एक्सक्लूड किया है।

कमांड ख़त्म होते ही कंटेनर भी रुक जाते हैं। उन्हें बैकग्राउंड में चलाए रखने के लिए --detach फ़्लैग इस्तेमाल करें: 

docker compose up --detach

इस कमांड को चलाने से पहले, सुनिश्चित करें कि आपने उस डायरेक्टरी में नेविगेट (cd) कर लिया है जहाँ आपकी docker-compose.yml फ़ाइल मौजूद है।

docker-compose down

docker compose down कमांड कंटेनरों को रोकता है और docker compose up द्वारा बनाए गए कंटेनर, इमेजेज़, नेटवर्क्स और वॉल्यूम्स को हटाता है। 

  • सिंटैक्स: docker compose down [OPTIONS] [SERVICES]

इसके साथ आप विभिन्न विकल्प उपयोग कर सकते हैं, जिनमें निम्न शामिल हैं:

docker compose down कमांड के विकल्प।

docker compose down कमांड के विकल्प। स्रोत: Docker docs.

डिफ़ॉल्ट रूप से, यह कमांड निम्न को हटाता है:

  • Compose फ़ाइल में परिभाषित सर्विसेज़ के कंटेनर।
  • Compose फ़ाइल के networks सेक्शन में परिभाषित नेटवर्क्स।
  • डिफ़ॉल्ट नेटवर्क, यदि उसका उपयोग हुआ है।

निम्न को डिफ़ॉल्ट रूप से नहीं हटाया जाता:

  • वे नेटवर्क और वॉल्यूम्स जो external के रूप में परिभाषित हैं।
  • अनाम (anonymous) वॉल्यूम्स, यानी जिनका कोई नाम नहीं है।

अनाम वॉल्यूम्स को docker compose up दोबारा चलाने पर अपने-आप माउंट नहीं किया जाता क्योंकि उनके नाम नहीं होते। यदि आपको पर्सिस्टेंट डेटा स्टोरेज चाहिए, तो नेम्ड वॉल्यूम्स या bind mounts का उपयोग बेहतर है।

Docker कमांड्स का उपयोग: सर्वोत्तम प्रथाएँ

Docker कंटेनरों में एप्लिकेशन बनाना, शिप करना और चलाना एक शक्तिशाली तरीका है। लेकिन इसे अच्छी तरह, कुशलतापूर्वक और स्केलेबल ढंग से उपयोग करने के लिए, कुछ बेस्ट प्रैक्टिसेज़ का पालन करना ज़रूरी है।

पर्सिस्टेंट डेटा के लिए Docker वॉल्यूम्स का उपयोग करें

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

वॉल्यूम्स हमें यह करने देते हैं:

  • कंटेनर डिलीट होने के बाद भी डेटा बनाए रखना।
  • होस्ट-लेवल स्पीड के साथ परफ़ॉर्मेंस-क्रिटिकल डेटा स्टोर करना।
  • Docker के ज़रिए स्टोरेज को आसानी से मैनेज करना।

ये दीर्घकालिक डेटा या तब आदर्श हैं जब कई कंटेनरों को साझा एक्सेस की ज़रूरत हो। यह ध्यान रखें कि यदि आपको होस्ट से सीधे फ़ाइलों तक पहुँच चाहिए, तो bind mounts बेहतर विकल्प हो सकते हैं, क्योंकि वॉल्यूम्स पूरी तरह Docker द्वारा मैनेज होते हैं।

Docker Compose से ऑटोमेशन करें

कई कंटेनरों को मैन्युअली मैनेज करना बोझिल हो सकता है। Docker Compose सबकुछ एक YAML फ़ाइल में परिभाषित करने की सुविधा देकर चीज़ों को सरल बना देता है ताकि आप बिल्डिंग पर फ़ोकस कर सकें।

यह बेस्ट प्रैक्टिस अपनाने लायक़ क्यों है:

  • एक सरल कमांड: अपनी सर्विसेज़ को एक ही बार में स्टार्ट, स्टॉप, स्केल या रिबिल्ड करें।
  • सबके लिए सुसंगति: चाहे आप डेवलपमेंट, टेस्टिंग या प्रोडक्शन में काम कर रहे हों, Compose एनवायरनमेंट्स को अलाइंड रखता है ताकि “यह मेरी मशीन पर तो चलता है” जैसी समस्याएँ न हों।
  • बिल्ट-इन नेटवर्किंग: Compose एक साझा नेटवर्क बनाता है ताकि आपकी सर्विसेज़ IP की बजाय सर्विस नामों से आसानी से संवाद कर सकें।
  • आसान स्केलिंग: आप --scale फ़्लैग से सर्विसेज़ को जल्दी से ऊपर-नीचे स्केल कर सकते हैं, जो अलग-अलग लोड्स पर आपकी ऐप के व्यवहार की टेस्टिंग के लिए बढ़िया है।
  • स्पष्ट और सहयोगी कॉन्फ़िग: आपका पूरा सेटअप—कंटेनर, नेटवर्क्स और वॉल्यूम्स सहित—वर्ज़न-कंट्रोल्ड और पठनीय होता है।

निष्कर्ष

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

और यदि आप सीखना जारी रखना चाहते हैं, तो आगे खोजने के लिए ये बेहतरीन संसाधन हैं:

FAQs

सबसे ज़्यादा उपयोग होने वाले Docker कमांड्स कौन से हैं?

सबसे आम Docker कमांड्स में docker run, docker ps, docker build, docker pull और docker-compose up शामिल हैं।

Docker वॉल्यूम्स bind mounts से कैसे अलग हैं?

Docker वॉल्यूम्स Docker द्वारा मैनेज किए जाते हैं और पोर्टेबिलिटी व डेटा पर्सिस्टेंस के लिए आदर्श हैं, जबकि bind mounts होस्ट सिस्टम के एक विशिष्ट फ़ाइल पाथ से लिंक करते हैं।

क्या मैं एक ही कमांड से कई कंटेनर चला सकता/सकती हूँ?

हाँ, docker-compose up को docker-compose.yml फ़ाइल के साथ उपयोग करने पर आप एक ही बार में कई सर्विसेज़ चला सकते हैं।

docker start और docker run में क्या अंतर है?

docker run नया कंटेनर बनाकर स्टार्ट करता है, जबकि docker start किसी मौजूदा, रुके हुए कंटेनर को दोबारा स्टार्ट करता है।

मैं सभी रुके हुए कंटेनरों की सूची कैसे देखूँ?

सभी कंटेनरों (रुके हुए सहित) को देखने के लिए docker ps -a चलाएँ।

docker exec कमांड का उद्देश्य क्या है?

यह आपको किसी रनिंग कंटेनर के अंदर कमांड चलाने देता है—अक्सर डीबगिंग या मैन्युअल जाँच के लिए।

क्या Docker केवल Linux-आधारित सिस्टम्स के लिए है?

नहीं, Docker macOS और Windows को भी सपोर्ट करता है, जहाँ यह कंटेनराइज़ेशन सक्षम करने के लिए हल्के वर्चुअल मशीनों का उपयोग करता है।

docker-compose down कमांड क्या करता है?

यह docker-compose up द्वारा बनाए गए कंटेनर, नेटवर्क्स और वॉल्यूम्स को रोकता और हटाता है।

मैं dangling Docker इमेजेज़ कैसे हटाऊँ?

अनुपयोगी इमेजेज़ हटाकर डिस्क स्पेस खाली करने के लिए docker image prune चलाएँ।

क्या Docker का उपयोग प्रोडक्शन वातावरणों में किया जा सकता है?

बिल्कुल। Docker का प्रोडक्शन में व्यापक उपयोग होता है—स्केलेबल, पुनरुत्पाद्य एप्लिकेशंस को क्लाउड और ऑन-प्रेम सेटअप्स में डिप्लॉय करने के लिए।

Laiba Siddiqui

लेखक

Laiba Siddiqui

मैं एक कंटेंट स्ट्रैटेजिस्ट हूँ जिसे जटिल विषयों को सरल बनाना पसंद है। मैंने Splunk, Hackernoon, और Tiiny Host जैसी कंपनियों को अपने दर्शकों के लिए आकर्षक और सूचनात्मक सामग्री बनाने में मदद की है।

विषय