Docker
कंटेनरों का प्रबंधन
खोज…
वाक्य - विन्यास
- docker rm [विकल्प] कंटेनर [कंटेनर ...]
- डॉकटर संलग्न [विकल्प] कंटेनर
- docker execute [विकल्प] कंटेनर COMMAND [ARG ...]
- docker ps [विकल्प]
- डॉकटर लॉग्स [विकल्प] कंटेनर
- डॉकटर निरीक्षण [विकल्प] कंटेनर | छवि [कंटेनर | छवि ...]
टिप्पणियों
- ऊपर दिए गए उदाहरणों में, जब भी कंटेनर docker कमांड का एक पैरामीटर होता है, तो उसे
<container>
याcontainer id
या<CONTAINER_NAME>
रूप में उल्लिखित किया जाता है। इन सभी जगहों पर आप कंटेनर को निर्दिष्ट करने के लिए कंटेनर का नाम या कंटेनर आईडी पास कर सकते हैं।
लिस्टिंग कंटेनर
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
अपने आप ही वर्तमान में चल रहे कंटेनर को प्रिंट करता है। सभी कंटेनरों को देखने के लिए (रुकने वालों सहित), -a
ध्वज का उपयोग करें:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
एक विशिष्ट स्थिति वाले कंटेनरों को सूचीबद्ध करने के लिए, परिणामों को फ़िल्टर करने के लिए -f
कमांड लाइन विकल्प का उपयोग करें। यहाँ उन सभी कंटेनरों को सूचीबद्ध करने का एक उदाहरण दिया गया है जो बाहर निकल चुके हैं:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
यह भी -q
स्विच के साथ केवल कंटेनर आईडी सूचीबद्ध करने के लिए संभव है। यह अन्य यूनिक्स उपयोगिताओं (जैसे grep
और awk
) के साथ परिणाम पर काम करना बहुत आसान बनाता है:
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
जब docker run --name mycontainer1
साथ एक कंटेनर लॉन्च किया docker run --name mycontainer1
तो आप एक विशिष्ट नाम देते हैं न कि एक यादृच्छिक नाम (रूप में mood_famous, जैसे कि nostalgic_stallman), और इस तरह की कमांड के साथ इसे खोजना आसान हो सकता है
docker ps -f name=mycontainer1
रेफरिंग कंटेनर
डॉकटर कमांड जो एक कंटेनर का नाम लेते हैं, तीन अलग-अलग रूपों को स्वीकार करते हैं:
प्रकार | उदाहरण |
---|---|
पूर्ण यूयूआईडी | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
शॉर्ट यूयूआईडी | 9cc69f11a0f7 |
नाम | berserk_wozniak |
अपने सिस्टम पर कंटेनरों के लिए इन मूल्यों को देखने के लिए docker ps
का उपयोग करें।
UUID को डॉकर द्वारा जनरेट किया गया है और इसे संशोधित नहीं किया जा सकता है। जब आप इसे प्रारंभ करते हैं तो आप कंटेनर को एक नाम प्रदान कर सकते हैं docker run --name <given name> <image>
। यदि आप कंटेनर को शुरू करने के समय एक निर्दिष्ट नहीं करते हैं तो डॉक कंटेनर में एक यादृच्छिक नाम उत्पन्न करेगा।
नोट : UUID का मूल्य (या 'छोटा' UUID) किसी भी लम्बाई का हो सकता है जब तक कि दिया गया मूल्य एक कंटेनर के लिए अद्वितीय न हो
कंटेनरों को शुरू करना और रोकना
एक चल रहे कंटेनर को रोकने के लिए:
docker stop <container> [<container>...]
यह कंटेनर में एक SIGTERM में मुख्य प्रक्रिया भेजेगा, इसके बाद SIGKILL द्वारा यदि यह अनुग्रह अवधि के भीतर बंद नहीं होता है। प्रत्येक कंटेनर का नाम छपते ही बंद हो जाता है।
एक कंटेनर शुरू करने के लिए जिसे रोका गया है:
docker start <container> [<container>...]
यह पृष्ठभूमि में पारित प्रत्येक कंटेनर को शुरू करेगा; प्रत्येक कंटेनर का नाम शुरू होते ही प्रिंट हो जाता है। कंटेनर को अग्रभूमि में शुरू करने के लिए, -a
( --attach
) ध्वज पास करें।
कस्टम प्रारूप वाले कंटेनरों की सूची बनाएं
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
एक विशिष्ट कंटेनर ढूँढना
docker ps --filter name=myapp_1
कंटेनर आईपी का पता लगाएं
अपने कंटेनर का IP पता जानने के लिए, उपयोग करें:
docker inspect <container id> | grep IPAddress
या docker निरीक्षण का उपयोग करें
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
डॉकटर कंटेनर को पुनः आरंभ करना
docker restart <container> [<container>...]
विकल्प - समय : सेकंड को रोकने के लिए कंटेनर को मारने से पहले इंतजार करना (डिफ़ॉल्ट 10)
docker restart <container> --time 10
निकालें, हटाएं और कंटेनरों को साफ करें
docker rm
का उपयोग इस तरह के एक विशिष्ट कंटेनर को हटाने के लिए किया जा सकता है:
docker rm <container name or id>
सभी कंटेनरों को निकालने के लिए आप इस अभिव्यक्ति का उपयोग कर सकते हैं:
docker rm $(docker ps -qa)
डिफ़ॉल्ट रूप से docker चल रहे कंटेनर को नहीं हटाएगा। जो भी कंटेनर चल रहा है, वह चेतावनी संदेश का उत्पादन करेगा और हटाया नहीं जाएगा। अन्य सभी कंटेनरों को हटा दिया जाएगा।
वैकल्पिक रूप से आप xargs
उपयोग कर सकते हैं:
docker ps -aq -f status=exited | xargs -r docker rm
जहाँ docker ps -aq -f status=exited
कंटेनर ID की सूची लौटाएगा, जिसमें "Exit" की स्थिति है।
चेतावनी: उपरोक्त सभी उदाहरण केवल 'बंद' कंटेनरों को हटा देंगे।
कंटेनर को हटाने के लिए, चाहे वह रोका गया हो या नहीं, आप बल फ्लैग -f
उपयोग कर सकते हैं:
docker rm -f <container name or id>
सभी कंटेनरों को हटाने के लिए, राज्य की परवाह किए बिना:
docker rm -f $(docker ps -qa)
यदि आप dead
स्थिति वाले केवल कंटेनरों को निकालना चाहते हैं:
docker rm $(docker ps --all -q -f status=dead)
यदि आप exited
स्थिति वाले केवल कंटेनरों को निकालना चाहते हैं:
docker rm $(docker ps --all -q -f status=exited)
कंटेनरों को सूचीबद्ध करते समय उपयोग किए जाने वाले फ़िल्टर के ये सभी क्रमपरिवर्तन हैं।
संस्करण 1.3 के बाद अंतरिक्ष का उपयोग करने वाले दोनों अवांछित कंटेनरों और झूलने वाली छवियों को हटाने के लिए, निम्नलिखित का उपयोग करें (यूनिक्स उपकरण df
समान):
$ docker system df
सभी अप्रयुक्त डेटा को निकालने के लिए:
$ docker system prune
पहले से मौजूद डॉकटर कंटेनर पर कमांड चलाएँ
docker exec -it <container id> /bin/bash
पहले से चल रहे कंटेनर में कुछ त्वरित परीक्षण करने के लिए लॉग इन करना या एप्लिकेशन क्या कर रहा है यह देखना आम है। अक्सर यह लॉग के कारण खराब कंटेनर उपयोग प्रथाओं को दर्शाता है और परिवर्तित फ़ाइलों को वॉल्यूम में रखा जाना चाहिए। यह उदाहरण हमें कंटेनर में लॉग इन करने की अनुमति देता है। यह मानता है कि / बिन / बैश कंटेनर में उपलब्ध है, यह / बिन / श या कुछ और हो सकता है।
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
यह उदाहरण एक टार में डेटा निर्देशिका की सामग्री को संग्रहीत करता है। फिर docker cp
आप इसे पुनः प्राप्त कर सकते हैं।
कंटेनर लॉग
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
उदाहरण के लिए:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
डेमन के रूप में चल रहे एक उदाहरण से कनेक्ट करें
इसे प्राप्त करने के दो तरीके हैं, पहला और सबसे अधिक ज्ञात निम्नलिखित है:
docker attach --sig-proxy=false <container>
यह एक शाब्दिक रूप से आपके बैश को कंटेनर बैश से जोड़ता है, जिसका अर्थ है कि यदि आपके पास एक रनिंग स्क्रिप्ट है, तो आप परिणाम देखेंगे।
अलग करने के लिए, बस टाइप करें: सीटीएल-पी सीटीएल-क्यू
लेकिन अगर आपको अधिक अनुकूल तरीके की आवश्यकता है और नए बैश इंस्टेंसेस बनाने में सक्षम हैं, तो बस निम्नलिखित कमांड चलाएँ:
docker exec -it <container> bash
/ कंटेनर से फ़ाइल की प्रतिलिपि बनाना
कंटेनर से होस्ट करने के लिए
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
मेज़बान से लेकर कंटेनर तक
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
अगर मैं jess / ट्रांसमिशन का उपयोग करता हूं
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, कंटेनर में फ़ाइलें / संचरण / डाउनलोड में हैं
और होस्ट पर मेरी वर्तमान निर्देशिका / घर / $ USER / abc है, के बाद
docker cp transmission_id_or_name:/transmission/download .
मेरे पास कॉपी की गई फाइलें होंगी
/home/$USER/abc/transmission/download
आप नहीं, का उपयोग कर सकते हैं docker cp
केवल एक फ़ाइल की प्रतिलिपि, आप निर्देशिका वृक्ष और फ़ाइलों की प्रतिलिपि
निकालें, हटाएं और डॉक करने वाले संस्करणों को साफ करें
जब कंटेनर रोक दिया जाता है तो डॉकटर वॉल्यूम स्वचालित रूप से हटाए नहीं जाते हैं। कंटेनर बंद करने पर संबद्ध वॉल्यूम निकालने के लिए:
docker rm -v <container id or name>
यदि -v
ध्वज निर्दिष्ट नहीं है, तो वॉल्यूम 'डिस्क पर वॉल्यूम' के रूप में रहता है। सभी झूलने वाले संस्करणों को हटाने के लिए:
docker volume rm $(docker volume ls -qf dangling=true)
docker volume ls -qf dangling=true
फ़िल्टर docker volume ls -qf dangling=true
वॉल्यूम संस्करणों की एक सूची लौटाएगा, जिसमें असंबद्ध लोग भी शामिल हैं, जो एक कंटेनर से जुड़े नहीं हैं।
वैकल्पिक रूप से, आप xargs
उपयोग कर सकते हैं:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
निर्यात और आयात डॉक कंटेनर फाइलसिस्टम
डॉकटर कंटेनर की फाइल सिस्टम सामग्री को टैरकबॉल फ़ाइल में सहेजना संभव है। यह अलग-अलग मेजबानों में कंटेनर फाइलसिस्टम को स्थानांतरित करने के लिए एक चुटकी में उपयोगी है, उदाहरण के लिए यदि डेटाबेस कंटेनर में महत्वपूर्ण परिवर्तन हैं और यह अन्यथा उन परिवर्तनों को दोहराने के लिए संभव नहीं है। कृपया ध्यान दें कि कंटेनर के फाइल सिस्टम को निर्यात करने और स्थानांतरित करने के बजाय, docker-compose.yml
docker run
कमांड या docker-compose.yml
फ़ाइल का उपयोग करके एक अद्यतन छवि से पूरी तरह से नया कंटेनर बनाना बेहतर है। डॉकर की शक्ति का एक हिस्सा छवियों और कंटेनरों को बनाने की अपनी घोषणात्मक शैली की लेखापरीक्षा और जवाबदेही है। docker export
और docker import
का उपयोग करके, यह शक्ति अपने मूल राज्य से कंटेनर के फाइल सिस्टम के अंदर किए गए परिवर्तनों के स्थगन के कारण वश में है।
docker export -o redis.tar redis
उपरोक्त कमांड एक खाली छवि बनाएगा और फिर redis
कंटेनर के फाइल सिस्टम को इस खाली छवि में निर्यात करेगा। टारबॉल संग्रह से आयात करने के लिए, उपयोग करें:
docker import ./redis.tar redis-imported:3.0.7
यह कमांड redis-imported:3.0.7
इमेज बनाएगा, जिसमें से कंटेनर बनाए जा सकते हैं। आयात पर परिवर्तन करना संभव है, साथ ही एक प्रतिबद्ध संदेश भी सेट करें:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Dockerfile निर्देशों का उपयोग के लिए उपलब्ध -c
कमांड लाइन विकल्प हैं CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
।