ठीक है, चलो इस डॉकर विकास को तोड़ते हैं. यह जंगली है कि चीजें कैसे बदलती हैं।
याद रखें जब डॉकर महसूस हुआ ... एक गड़बड़ ओटोपस की लड़ाई? इतने सारे आदेश, इतने सारे अवधारणाएं. निर्माण, चलाएं, धक्का दें, खींचें, मात्राएं, नेटवर्क ... मेरा सिर घूम रहा था. मैं इसका उपयोग करता था, निश्चित रूप से, क्योंकि हर कोई कहता था कि मैंहोना चाहिए, लेकिन यह हमेशा थोड़ा घबराहट महसूस करता था, थोड़ा ... घर्षण से भरा।docker ps -a
इस बात को याद करने की कोशिश करते हुएएकपिछले हफ्ते से कमांड
फिर, धीरे-धीरे, चीजें क्लिक करना शुरू कर दी। एक बड़ा यूरिका क्षण नहीं, लेकिन छोटे "अहा!" खोजों की एक श्रृंखला। छोटे ट्रिक्स, अनुकूलन, कार्य प्रवाह समायोजन। हैक्स, मुझे लगता है? और ईमानदारी से, वे मेरे दैनिक दिनचर्या में इतने गीले हो गए हैं कि मैं अब उन पर शायद ही सोचता हूं।मैं चीजों को कैसे करता हूं.
ये हैं गेम-विन्यासर्स जो फंस गए हैं:
Terminal Aliases: The Sanity Savers के बारे में जानें
पहली बड़ी जीत?Aliases.गंभीरता से. ♂️ क्यों मैंने महीनों तक टाइप कियाdocker-compose up -d --build
याdocker ps
एक बार और एक बार फिर से: मेरे अंदर सरल एनीमेट्स सेट करना.bashrc
या.zshrc
एक खुलासा था।
# My sanity savers
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcb='docker-compose build'
alias dcr='docker-compose run --rm' # For running one-off commands
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dip='docker image prune -f' # Prune dangling images
alias dvp='docker volume prune -f' # Prune unused volumes
alias dsp='docker system prune -af' # The big cleanup! 💥
टाइप करेंdcu
पूरे shebang के बजाय? ओह, मिलीसेकंड बचाए गए! यह छोटा सा लगता है, लेकिन दिन में दर्जनों बार यह गुणा करें ... यह जोड़ता है. मेरे उंगली मुझे धन्यवाद. कम टाइपिंग, कम टाइप, अधिक प्रवाह।
यहां से docker का अंतिम cheatsheet प्राप्त करें:डॉक Cheatsheet
2. शक्तिशाली.dockerignore
फ़ाइल: Slimming Down Builds
फिर आते हैं.dockerignore
एक और "दह" क्षण. मैं जानता था के बारे में.gitignore
बेशक, लेकिन मैं शुरुआत में समझ नहीं पा रहा था कि कितना महत्वपूर्ण.dockerignore
मेरे प्रारंभिक Docker builds थेइतनी धीमीक्यों? क्योंकि निर्माण संदर्भ भेज रहा थासब कुछDocker Daemon के बारे में जानेंnode_modules
, लॉग, अस्थायी फ़ाइलें, स्थानीय निर्माण आर्टिफैक्ट्स ... सब कुछ!
सही बनाने के लिए.dockerignore
फ़ाइल, सभी कचरे को सूचीबद्ध करें जिन्हें मुझे आवश्यकता नहीं थीअंदरअचानक, बिल्डिंग तेजी से थे. छवियों को छोटा था (कभी-कभी नाटकीय रूप से इतना)।इस, बाकी को अनदेखा करें." कम गड़बड़ी, तेजी से प्रतिक्रिया लूप. शेफ का चुंबन! 👌
3. मल्टी-स्टेज बिल्डिंग: लीन, मध्यम उत्पादन मशीन ➡️
Multi-stage builds... ठीक है, यह एक शुरू में थोड़ा अधिक उन्नत लग रहा था. अवधारणा शानदार है, हालांकि।
- चरण 1: सभी बिल्ड टूल, संकलक, एसडीके, और निर्भरताओं के साथ एक आधार छवि का उपयोग करें जो अनुप्रयोग आर्टिफैक्ट बनाने के लिए आवश्यक है (जैसे एक संकलित बाइनरी या बैंडेड जावास्क्रिप्ट)।
- चरण 2: एक नया, साफ, न्यूनतम आधार छवि शुरू करें (जैसे अल्फाइन या असुरक्षित)।
- कॉपी: केवल पहले चरण से इस शुद्ध दूसरे चरण में अंतिम आर्टिफैक्ट को कॉपी करें।
परिणाम? छोटे उत्पादन छवियों! निर्माण उपकरणों और डेवलपर निर्भरताओं (जो एक सुरक्षा जोखिम भी हैं) के साथ उड़ाए गए छवियों को शिपिंग करने के बजाय!केवलएप्लिकेशन चलाने के लिए क्या आवश्यक है यह सिंटाक्स के चारों ओर मेरे सिर को लपेटने में थोड़ा समय लगा, लेकिन वाह, छवि आकार और सुरक्षा रवैया में अंतर बड़ा है।
4. Docker Compose Overrides: Taming Environments ️
चलो बात करते हैंDocker Compose override
फ़ाइलें. विभिन्न वातावरणों का प्रबंधन दर्द होता था. डेवलपर्स को लाइव कोड फिर से लोड करने के लिए इकट्ठा वॉल्यूम की आवश्यकता होती है, डिबग पोर्ट खुले होते हैं. प्रोड को अलग-अलग पर्यावरण परिवर्तक की आवश्यकता होती है, शायद अधिक सख्त संसाधन सीमाएं, शायद एक अलग प्रवेश बिंदु।docker-compose.yml
गड़बड़ी थी, जिसमें टिप्पणी किए गए अनुभाग या जटिल शामिल थेif
पर्यावरण परिवर्तनों के आधार पर।
खोजेंdocker-compose.override.yml
शुद्ध आशीर्वाद था. आपके पास आपका आधार हैdocker-compose.yml
सामान्य संस्करण के साथ. फिर, आप बनाते हैंdocker-compose.override.yml
(जिसे आमतौर पर अनदेखा किया जाता है.gitignore
) अपने स्थानीय विकास tweaks के लिए – कोड निर्देशिकाओं को स्थापित करने के लिए, विभिन्न पोर्ट्स को प्रकट करने के लिए, डिबग टूल जोड़ने के लिए।override
आप विशेष फ़ाइलें भी रख सकते हैं जैसे किdocker-compose.prod.yml
और उपयोग करें-f
झंडा :docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
. चिंताओं के साफ विभाजन. dev सेटिंग्स के कोई और यादृच्छिक कब्जे नहीं!
5. नियमित सफाई: सिस्टम Tidy रखने ✨
और अंत में, आदतregular cleanupDocker संग्रहीत कर सकते हैंइतनीयदि आप सावधान नहीं हैं तो समय के साथ क्रॉस हो सकता है. खतरनाक छवियों (पहले संस्करणों से अनगिनत परतें), अप्रयुक्त वॉल्यूम, बंद कंटेनर, पुराने संस्करण कैश... मेरा डिस्क स्थान रहस्यमय रूप से गायब हो गया था।
धीरे-धीरे दौड़ने की गति में प्रवेश करनाdocker system prune -af
(आक्रामक दृष्टिकोण) या अधिक लक्षितdocker image prune
,docker volume prune
,docker network prune
औरdocker builder prune
डिजिटल decluttering की तरह महसूस करता है. यह चीजों को सुचारू रूप से चलाता है, अजीब कैशिंग मुद्दों को रोकता है ("क्यों मेरी बदलाव दिखाई नहीं दे रही है?!"), और मूल्यवान जीबी को मुक्त करता है. एक साफ कार्यक्षेत्र, एक साफ दिमाग, सही है? ♂️ चलनाdsp
(मेरा एलर्जी के लिएdocker system prune -af
) अब एक संतोषजनक, लगभग चिकित्सा, दिनचर्या है।
तो हाँ, ये अब सिर्फ 'हैक' नहीं हैं. वे जड़ में हैं. वे मांसपेशियों की स्मृति हैं. एलियंस बिना सोचे मेरे उंगलियों से उड़ते हैं..dockerignore
यह मेरे द्वारा बनाए गए पहले फ़ाइलों में से एक है। बहु-स्तरीय बिल्डिंग संभावित रूप से जीवित होने वाले किसी भी चीज़ के लिए डिफ़ॉल्ट हैं. Compose overrides आसानी से पर्यावरण अंतरों को संभालते हैं. कटौती नियमित रूप से होती है.
Docker एक शक्तिशाली, सरल सहायक के रूप में गड़बड़ ओटोपस से चला गया. यह अब मेरे रास्ते से बाहर हो जाता है. बिल्डिंग तेजी से हैं, डिप्लोमाइन्स चिकनी हैं, मेरा डिस्क स्थान अधिक खुश है, और ईमानदारी से,मैं हूँयह सिर्फ Docker के बारे में नहीं है; यह इस बारे में है कि इन छोटे विवरणों को कैसे मास्टर करना मेरे पूरे विकास और तैनाती कार्य प्रवाह को चिकना कर दिया है. यह निश्चित रूप से मेरे जीवन का हिस्सा बन गया है, या कम से कम, मेरा डिजिटल जीवन।