"-फॉर्मेट" और आउटपुट टेम्प्लेट के साथ डॉकर सीएलआई का पावर यूजर कैसे बनें
अपने सिस्टम संसाधनों को सूचीबद्ध करने और उनका निरीक्षण करने के लिए डॉकर सीएलआई का उपयोग करना अक्सर वर्बोज़ आउटपुट उत्पन्न करता है जो महत्वपूर्ण विवरणों को अस्पष्ट कर सकता है। डॉकर गो के टेम्पलेट सिंटैक्स का समर्थन करता है --format
जो प्रदर्शित किया जाता है उस पर आपको नियंत्रण देने के लिए ध्वज।
टेम्प्लेट का उपयोग करना सीखना आपको एक अनुभवी डॉकर सीएलआई उपयोगकर्ता बना सकता है। वे आपको आवश्यक विचारों को बनाने के लिए कमांड आउटपुट को कुशलतापूर्वक चुनने और बदलने की अनुमति देते हैं। इसके परिणामस्वरूप अधिक उत्पादक सीएलआई अनुभव होता है और लंबी कंसोल लाइनों को पार्स करने में कम समय लगता है।
सारांश
कौन से आदेश "-format" का समर्थन करते हैं?
La --format
ध्वज सबसे अधिक उपयोग किए जाने वाले द्वारा समर्थित है docker
आदेश। आप इसके साथ प्रयोग कर सकते हैं docker inspect
और आदेश जो वस्तुओं की सूची तैयार करते हैं, जैसे कि docker ps
, docker images
et docker volumes
.
जब आप को शामिल करते हैं --format
ध्वज, डॉकर आपके द्वारा प्रदान की जाने वाली गो मॉडल स्ट्रिंग के माध्यम से कमांड आउटपुट भेजेगा। आप डॉकर द्वारा परिभाषित प्लेसहोल्डर्स के साथ काम करने के लिए गो द्वारा प्रदान की गई टेम्प्लेटिंग सुविधाओं का उपयोग कर सकते हैं। ये आपको सीएलआई द्वारा प्राप्त डेटा तक पहुंच प्रदान करते हैं।
एक बुनियादी उदाहरण
आपरेशन docker inspect
एक कंटेनर पर एक लंबा JSON ऑब्जेक्ट प्रदर्शित करता है जो आमतौर पर आपकी टर्मिनल विंडो को ओवरफ्लो करता है। का उपयोग करते हुए --format
आप डेटा के विशिष्ट भागों को निकाल सकते हैं जो आपकी रुचि रखते हैं। यहां एक उदाहरण दिया गया है जो कंटेनर की स्थिति, PID और प्रारंभ समय दिखाता है:
~$ docker inspect 94a8d1315315 --format '{{.State.Status}} (PID: {{.State.Pid}}) {{.State.StartedAt}}'
running (PID: 1488278) 2022-03-22T20:45:58.614115689Z
कच्चे JSON के माध्यम से मैन्युअल रूप से पुनरावृति करने की तुलना में पैटर्न का उपयोग करके लक्ष्य मानों को खोजना बहुत आसान है।
आउटपुट मान एक्सेस करें
आपके टेम्पलेट के गतिशील भाग दोहरे घुंघराले कोष्ठकों से घिरे हुए हैं। आप डॉकर कमांड आउटपुट में मूल्यों का संदर्भ दे सकते हैं {{.Field}}
वाक्य - विन्यास। Field
इस आउटपुट के JSON प्रतिनिधित्व में एक संपत्ति का नाम होना चाहिए। नेस्टेड फ़ील्ड को जावास्क्रिप्ट में प्रॉपर्टी एक्सेस के समान एक जंजीर सिंटैक्स का उपयोग करके चुना जाता है, .Field.NestedValue
.
आप कमांड के कच्चे आउटपुट को देखकर निर्धारित कर सकते हैं कि कौन से फ़ील्ड उपलब्ध हैं। docker inspect
डिफ़ॉल्ट रूप से JSON प्रदर्शित करता है; इसे सीधे टेम्प्लेट सिंटैक्स प्लेसहोल्डर्स में मैप किया जा सकता है। अन्य आदेशों के लिए जैसे ps
et images
आप एक विशेष टेम्पलेट का उपयोग करके अंतर्निहित JSON संरचना को पुनः प्राप्त कर सकते हैं:
docker ps --format '{{json .}}`
La json
फ़ंक्शन आपके द्वारा प्रदान किए गए डेटा का कच्चा JSON संस्करण प्रदर्शित करता है।
सरल परिवर्तन
रूपांतरण फ़ंक्शन मूल्यों में हेरफेर करने का एक सुविधाजनक तरीका प्रदान करते हैं। upper
et lower
स्ट्रिंग्स को क्रमशः अपर और लोअर केस में बदलें। आप शीर्षक केस को स्ट्रिंग के साथ लागू कर सकते हैं title
. मॉडल में कार्य उस मूल्य से पहले डाले जाते हैं जिस पर वे काम करते हैं:
~$ docker inspect 94a8d1315315 --format '{{upper .State.Status}} (PID: {{.State.Pid}})'
RUNNING (PID: 1488278)
यदि आप मानों के बीच एक न्यूलाइन वर्ण जोड़ना चाहते हैं, तो उपयोग करें println
समारोह:
~$ docker inspect 94a8d1315315 --format '{{.State.Status}} {{.State.Pid}}{{println}}{{.State.StartedAt}}'
running 1488278
2022-03-22T20:45:58.614115689Z
टेबल के साथ काम करना
टेम्पलेट सिंटैक्स ने एक सरणी के तत्वों को पुनरावृत्त करने के लिए समर्थन में बनाया है। range
फ़ंक्शन किसी सरणी के मानों पर लूप करता है और सेट करता है .
प्रत्येक के लिए परिवर्तनीय:
~$ docker inspect 94a8d1315315 --format '{{range .Mounts}}{{println .Destination}}{{end}}'
/config
/data
आप सरणी तत्वों को साथ जोड़ सकते हैं join
समारोह:
~$ docker inspect 94a8d1315315 --format '{{join .Config.Cmd " "}}'
caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
यह एक स्ट्रिंग बनाता है जो सरणी में प्रत्येक मान को एम्बेड करता है। आइटम दूसरे तर्क पैरामीटर के रूप में निर्दिष्ट पाठ के साथ जुड़े हुए हैं।
आउटपुट टैब
कई डॉकर कमांड डिफ़ॉल्ट रूप से मानव-पठनीय तालिका लेआउट में डेटा प्रदर्शित करते हैं। आप विशेष का उपयोग करके अपनी खुद की सरणियाँ बना सकते हैं table
मॉडल घटक।
उपयोग t
डेटा फ़ील्ड को तालिका कॉलम में अलग करने के लिए वर्ण। डॉकर सीएलआई कमांड आउटपुट में शामिल प्रत्येक आइटम के लिए टेम्प्लेट निष्पादित किया जाएगा। तालिका कॉलम स्वचालित रूप से उनकी सामग्री की लंबाई से मेल खाने के लिए आकार में होते हैं।
~$ docker images --format 'table {{.ID}}t{{.Tag}}t{{.Size}}'
IMAGE ID TAG SIZE
ede20431e41f caddy 40.4MB
e5179b119094 <none> 40.4MB
डॉकर स्वचालित रूप से आपके मॉडल में फ़ील्ड के लिए उपयुक्त कॉलम हेडर शामिल करता है।
सशर्त स्वरूपण
टेम्प्लेट सशर्त "if" स्टेटमेंट का भी समर्थन करते हैं। आप किसी शर्त के आधार पर भिन्न मान प्रदर्शित करके कमांड आउटपुट को गतिशील रूप से अनुकूलित कर सकते हैं:
~$ docker ps --format '{{.ID}} {{if eq .State "running"}}Alive{{else}}Not Running{{end}}'
94a8d1315315 Alive
यह मॉडल या तो प्रदर्शित करता है Alive
ou Not Running
प्रत्येक कंटेनर के आधार पर State
फ़ील्ड पर सेट है running
। if
ब्लॉक के बाद वह मान आता है जो स्थिति से मेल खाने पर प्रदर्शित होता है। एक वैकल्पिक else
ब्लॉक बाद में जंजीर किया जा सकता है। शर्त द्वारा समाप्त की जाती है {{end}}
खोजशब्द।
गो मॉडल में कई तुलना ऑपरेटर शामिल हैं। eq
उपरोक्त जांचता है कि पहला मान दूसरे के बराबर है या नहीं। निम्नलिखित विकल्प अतिरिक्त रूप से उपलब्ध हैं:
ne
- एक "अलग" तुलना।lt
- एक "से कम" तुलना (<))।lte
- ए "से कम या बराबर" तुलना (<=))।gt
- एक "से अधिक" तुलना (>))।gte
- एक "इससे बड़ा या बराबर" (>=) तुलना।
Il फिर and
, or
et not
जटिल अभिव्यक्तियों में शर्तों को जोड़ने के लिए कीवर्ड भी।
Jq . का उपयोग करके उन्नत स्वरूपण
La --format
ध्वज का उपयोग मुख्य रूप से मानव-पठनीय आउटपुट स्ट्रिंग्स बनाने के लिए किया जाता है। यदि आप कच्चे JSON का निरीक्षण करने में अधिक सहज हैं, तो आप अन्य टूल का उपयोग कर सकते हैं जैसे jq
डॉकर के आउटपुट में अधिक सीधे हेरफेर करने के लिए। यह तब उपयोगी हो सकता है जब आप अकेले गो टेम्प्लेट की तुलना में अधिक उन्नत क्वेरी बनाना चाहते हैं।
docker inspect
डिफ़ॉल्ट रूप से JSON उत्पन्न करता है ताकि इसके आउटपुट को सीधे पाइप किया जा सके jq
:
~$ docker inspect 94a8d1315315 | jq .[0].Config.Cmd
[
"caddy",
"run",
"--config",
"/etc/caddy/Caddyfile",
"--adapter",
"caddyfile"
]
अन्य कमांड के आउटपुट को इसके कच्चे JSON में परिवर्तित किया जाना चाहिए --format
इसे अग्रेषित करने से पहले jq
:
~$ docker images --format '{{json .}}' | jq .Size
"968MB"
"946MB"
"40.1MB"
Jq JSON डेटा के चयन, हेरफेर और स्वरूपण के लिए अपना स्वयं का सिंटैक्स प्रदान करता है। मूल बातें गो के टेम्प्लेट प्लेसहोल्डर्स के समान हैं। फ़ील्ड्स का उपयोग करके संदर्भित किया जाता है .Field
वाक्य - विन्यास। सरणी तत्वों का उपयोग करने के लिए समर्थन है .[index]
अंकन।
निष्कर्ष
जब आप चुनिंदा रूप से आउटपुट डेटा को देख सकते हैं और उसमें हेरफेर कर सकते हैं, तो डॉकर सीएलआई अधिक शक्तिशाली हो जाता है। के साथ मॉडल जाओ --format
ध्वज कस्टम इंटरफ़ेस बनाने का एक तरीका प्रदान करता है जो आपके कंटेनर प्रबंधन को सुव्यवस्थित करता है।
कुछ स्थितियों में, --format
आपको आवश्यक शक्ति और लचीलेपन की पेशकश नहीं कर सकता है। अग्रेषित डॉकर बाहरी उपकरणों जैसे कि jq
आपकी स्थापना को शीघ्रता से क्वेरी करने और इसके डेटा को अन्य प्रणालियों में प्रदर्शित करने का एक और तरीका प्रदान करता है।