प्रत्येक साधनाने काहीतरी वाईट गोष्ट बदलली — आणि तेच साधन कुठेतरी चुकीचे ठरते. या कोर्समधील प्रत्येक मोठ्या कल्पनेसाठी: ती येण्याआधी जीवन कसे होते, तिचे प्रामाणिक फायदे ✅ आणि तोटे ❌, आणि कुठे वापरावी 👍 विरुद्ध कुठे नाही 👎.
सर्व्हर-रूमचा काळ: प्रत्येक भौतिक मशीनवर एक ॲप, wiki पानावरून हाताने install केलेले — प्रत्येक सर्व्हर एक अनोखा "snowflake" ज्याला हात लावायची कोणाची हिंमत नसे. मग virtual machines (~2000 चे दशक): चांगली गर्दी, पण प्रत्येक VM संपूर्ण OS घेऊन येते — डिस्कवर गिगाबाइट, boot ला मिनिटे, आणि आतले तरीही बदलत राही ("माझ्या VM वर चालते"). सॉफ्टवेअर पाठवणे म्हणजे install डॉक्स, dependency याद्या, आणि प्रार्थना. Docker ने (2013) डबा स्वस्त केला: संपूर्ण OS शिवाय isolation.
Deploy म्हणजे फाइल हस्तांतरण: प्रत्येक सर्व्हरवर rsync/FTP ने कोड, किंवा "golden" VM snapshots/AMI बनवणे — बांधायला हळू, diff करणे अशक्य, audit करणे गूढ. "सर्व्हर 7 वर कोणती आवृत्ती आहे?" ला चांगले उत्तर नव्हते. रजिस्ट्रींनी deployment वस्तूंचे आवृत्ती असलेल्या, fingerprint केलेल्या, कुठूनही ओढता येणाऱ्या वस्तूंमध्ये रूपांतर केले.
बारा "आता हे चालवा" commands असलेली README, प्रत्येक डेव्हलपरच्या shell स्क्रिप्ट, आणि प्रत्येकी थोडे वेगळे चालणारे लॅपटॉप. किंवा Vagrant VMs: चांगले, पण जड आणि हळू. Compose ने संपूर्ण dev stack ला एक review करता येणारी फाइल आणि एक command बनवले.
एकतर तुम्ही host वर build करून वस्तू COPY करत होतात (host drift — कंटेनर ज्या रोगावर उपाय आहेत तोच), किंवा दोन Dockerfiles + एक glue स्क्रिप्ट ठेवत होतात (जुना "builder pattern"), किंवा तुम्ही सरळ स्वयंपाकघरच पाठवत होतात: compiler, package manager आणि source code असलेल्या 1GB+ production इमेज.
एकतर सगळ्यासाठी Docker Hub (मुळात सार्वजनिक, rate-limited, प्रत्येक node वर पासवर्ड), किंवा स्वतः registry:2 होस्ट करणे — म्हणजे तुम्ही patch करा, वाढवा, साठवा, backup घ्या आणि सुरक्षित ठेवा. AWS वर, आधीच चालवत असलेल्या compute शेजारी हा भरपूर निरर्थक त्रास होता.