डॉकर कंटेनर को स्थानीय स्तर पर चलाना आसान है। इसे उत्पादन में सुरक्षित रूप से चलाना – उचित कॉन्फ़िगरेशन, स्वास्थ्य जांच और शून्य-डाउनटाइम अपडेट के साथ – कुछ और कदम उठाने पड़ते हैं। यह मार्गदर्शिका 2026 में उत्पादन के लिए एक कंटेनरीकृत एप्लिकेशन को सही तरीके से तैनात करने के बारे में बताती है, एक उत्पादन-तैयार छवि से लेकर एक रिवर्स प्रॉक्सी और अपडेट तक जो ट्रैफ़िक में गिरावट नहीं करती है।
📋 Table of Contents
- चरण 1: एक उत्पादन-तैयार डॉकरफ़ाइल लिखें
- चरण 2: पर्यावरण चर के साथ कॉन्फ़िगरेशन संभालें
- स्वास्थ्य जांच से डॉकर (और आपके ऑर्केस्ट्रेटर या रिवर्स प्रॉक्सी) को पता चलता है कि क्या कंटेनर वास्तव में ट्रैफ़िक की सेवा के लिए तैयार है, न कि केवल चलने के लिए।
- यहां तक कि एक सर्वर पर भी, कंपोज़ आपके परिनियोजन को पुनरुत्पादित और स्व-दस्तावेजीकरण योग्य बनाता है। यह छवि, पोर्ट, पर्यावरण, पुनरारंभ नीति और निर्भरता को एक फ़ाइल में कैप्चर करता है।
- अपने ऐप के पोर्ट को सीधे इंटरनेट पर उजागर न करें। TLS को समाप्त करने, सुरक्षा हेडर जोड़ने और ट्रैफ़िक को रूट करने के लिए सामने एक रिवर्स प्रॉक्सी (Nginx, Caddy, या ट्रैफ़िक) रखें। Caddy लोकप्रिय है क्योंकि यह स्वचालित रूप से HTTPS प्रमाणपत्र प्राप्त करता है और नवीनीकृत करता है।
- अनुभवहीन अद्यतन – पुराने कंटेनर को रोकें, नया शुरू करें – अंतराल के दौरान ट्रैफ़िक कम कर देता है। शून्य-डाउनटाइम अपडेट के लिए, नया कंटेनर शुरू करें, इसके स्वास्थ्य जांच पास करने की प्रतीक्षा करें, फिर प्रॉक्सी स्विच करें और पुराने को हटा दें। ट्रैफ़िक और ऑर्केस्ट्रेटर इसे स्वचालित करते हैं; एक साधारण सेटअप पर आप दो संस्करणों को संक्षेप में चला सकते हैं और काट सकते हैं।
- लॉग ड्राइवर को कॉन्फ़िगर करें ताकि लॉग कहीं टिकाऊ हो जाएं, और लॉग का आकार सीमित कर दें ताकि कोई कंटेनर डिस्क को न भर सके। किसी हॉबी प्रोजेक्ट से परे किसी भी चीज़ के लिए लॉग को एक केंद्रीय स्थान (लोकी, क्लाउडवॉच, या ईएलके स्टैक) पर शिप करें।
- प्रश्न: क्या मुझे अपना डेटाबेस उत्पादन में एक कंटेनर में चलाना चाहिए?
- निष्कर्ष
चरण 1: एक उत्पादन-तैयार डॉकरफ़ाइल लिखें
मल्टी-स्टेज बिल्ड से शुरुआत करें ताकि आपकी अंतिम छवि में केवल वही शामिल हो जो उसे चलाने के लिए आवश्यक है – उपकरण और देव निर्भरता नहीं। छोटी छवियां तेजी से खींचती हैं, तेजी से शुरू होती हैं, और हमले की सतह छोटी होती है।
# Build stage
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Runtime stage
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]
नोट करेंUSER node लाइन – उत्पादन कंटेनरों को कभी भी रूट के रूप में न चलाएं। यदि ऐप से छेड़छाड़ की गई है तो गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाने से नुकसान सीमित हो जाता है।
चरण 2: पर्यावरण चर के साथ कॉन्फ़िगरेशन संभालें
कभी भी अपनी छवि में रहस्य न छुपाएं। रनटाइम पर कॉन्फ़िगरेशन और रहस्यों को पर्यावरण चर या एक रहस्य प्रबंधक के माध्यम से पास करें। आपकी छवि मंचन और उत्पादन में समान होनी चाहिए; केवल वातावरण भिन्न होता है।
docker run -d \
--name myapp \
--env-file /etc/myapp/production.env \
--restart unless-stopped \
-p 3000:3000 \
myapp:1.4.0
रखें फ़ाइल को छवि से हटा दें और संस्करण नियंत्रण से बाहर कर दें। एकल होस्ट पर, लॉक-डाउन अनुमतियों वाली एक env फ़ाइल काम करती है; बड़े पैमाने पर, डॉकर सीक्रेट्स, एडब्ल्यूएस सीक्रेट्स मैनेजर, या अपने प्लेटफ़ॉर्म के सीक्रेट स्टोर का उपयोग करें।.envचरण 3: स्वास्थ्य जांच जोड़ें
स्वास्थ्य जांच से डॉकर (और आपके ऑर्केस्ट्रेटर या रिवर्स प्रॉक्सी) को पता चलता है कि क्या कंटेनर वास्तव में ट्रैफ़िक की सेवा के लिए तैयार है, न कि केवल चलने के लिए।
जैसा समापनबिंदु जोड़ें अपने ऐप पर, फिर चेक घोषित करें।/healthइसके स्थान पर,
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget -qO- http://localhost:3000/health || exit 1
एकdocker psदिखाता है स्थिति, और ऑर्केस्ट्रेटर उन कंटेनरों पर ट्रैफ़िक भेजने से बच सकते हैं जो अभी भी गर्म हो रहे हैं या खराब हो गए हैं।healthy or unhealthyचरण 4: स्वच्छ सेटअप के लिए डॉकर कंपोज़ का उपयोग करें
यहां तक कि एक सर्वर पर भी, कंपोज़ आपके परिनियोजन को पुनरुत्पादित और स्व-दस्तावेजीकरण योग्य बनाता है। यह छवि, पोर्ट, पर्यावरण, पुनरारंभ नीति और निर्भरता को एक फ़ाइल में कैप्चर करता है।
पोस्टग्रेज के लिए नामित वॉल्यूम पर ध्यान दें – कंटेनर भंडारण अल्पकालिक है, इसलिए आपको जो भी डेटा रखना चाहिए वह वॉल्यूम में होता है, कंटेनर की लिखने योग्य परत के अंदर कभी नहीं।
services:
app:
image: myapp:1.4.0
restart: unless-stopped
env_file: /etc/myapp/production.env
expose:
- "3000"
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"]
interval: 30s
timeout: 3s
retries: 3
depends_on:
- db
db:
image: postgres:17-alpine
restart: unless-stopped
env_file: /etc/myapp/db.env
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
चरण 5: सामने एक रिवर्स प्रॉक्सी रखें
अपने ऐप के पोर्ट को सीधे इंटरनेट पर उजागर न करें। TLS को समाप्त करने, सुरक्षा हेडर जोड़ने और ट्रैफ़िक को रूट करने के लिए सामने एक रिवर्स प्रॉक्सी (Nginx, Caddy, या ट्रैफ़िक) रखें। Caddy लोकप्रिय है क्योंकि यह स्वचालित रूप से HTTPS प्रमाणपत्र प्राप्त करता है और नवीनीकृत करता है।
प्रॉक्सी HTTPS और हेडर को संभालता है जबकि आपका ऐप निजी डॉकर नेटवर्क के अंदर सादे HTTP पर अनुरोधों को परोसने पर ध्यान केंद्रित करता है।
# Caddyfile
myapp.example.com {
reverse_proxy app:3000
encode gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options nosniff
}
}
चरण 6: डाउनटाइम के बिना अपडेट परिनियोजित करें
अनुभवहीन अद्यतन – पुराने कंटेनर को रोकें, नया शुरू करें – अंतराल के दौरान ट्रैफ़िक कम कर देता है। शून्य-डाउनटाइम अपडेट के लिए, नया कंटेनर शुरू करें, इसके स्वास्थ्य जांच पास करने की प्रतीक्षा करें, फिर प्रॉक्सी स्विच करें और पुराने को हटा दें। ट्रैफ़िक और ऑर्केस्ट्रेटर इसे स्वचालित करते हैं; एक साधारण सेटअप पर आप दो संस्करणों को संक्षेप में चला सकते हैं और काट सकते हैं।
छवियों को हमेशा एक विशिष्ट संस्करण (
# Pull the new version and recreate with Compose
docker compose pull app
docker compose up -d --no-deps app
# Compose starts the new container; verify health before removing old
) के साथ टैग करें, कभी भीmyapp:1.4.0पर भरोसा न करें उत्पादन में. स्पष्ट टैग रोलबैक को तुच्छ बनाते हैं – आप ठीक से जानते हैं कि किस संस्करण को फिर से तैनात करना है।latestचरण 7: लॉगिंग और निगरानी
लॉग ड्राइवर को कॉन्फ़िगर करें ताकि लॉग कहीं टिकाऊ हो जाएं, और लॉग का आकार सीमित कर दें ताकि कोई कंटेनर डिस्क को न भर सके। किसी हॉबी प्रोजेक्ट से परे किसी भी चीज़ के लिए लॉग को एक केंद्रीय स्थान (लोकी, क्लाउडवॉच, या ईएलके स्टैक) पर शिप करें।
अक्सर पूछे जाने वाले प्रश्न
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:1.4.0
प्रश्न: क्या मुझे अपना डेटाबेस उत्पादन में एक कंटेनर में चलाना चाहिए?
उत्तर: छोटी परियोजनाओं के लिए, हाँ – दृढ़ता और नियमित बैकअप के लिए नामित वॉल्यूम के साथ। किसी भी महत्वपूर्ण या उच्च-स्तरीय चीज़ के लिए, एक प्रबंधित डेटाबेस (आरडीएस, क्लाउड एसक्यूएल) परिचालन जोखिम को काफी कम कर देता है।
प्रश्न: ऐप पोर्ट को सीधे उजागर क्यों नहीं किया जाए?
उ: आप टीएलएस समाप्ति, सुरक्षा हेडर और रूटिंग प्रबंधित करने के लिए एक बिंदु खो देंगे। एक रिवर्स प्रॉक्सी आपको एक होस्ट पर कई ऐप्स चलाने और प्रमाणपत्रों को केंद्रीय रूप से संभालने की सुविधा भी देता है।
प्रश्न: मैं रहस्यों को छवि से कैसे दूर रखूँ?
ए: उन्हें रनटाइम पर पर्यावरण चर, लॉक अनुमतियों वाली एक एनवी फ़ाइल, या एक रहस्य प्रबंधक के माध्यम से पास करें। कभी नहीं
Dockerfile में छवि या हार्डकोड क्रेडेंशियल में एक रहस्य फ़ाइल।COPYप्रश्न: मुझे किस पुनरारंभ नीति का उपयोग करना चाहिए?
अधिकांश सेवाओं के लिए – यह विफलता पर और होस्ट रीबूट के बाद कंटेनर को पुनरारंभ करता है, लेकिन मैन्युअल स्टॉप का सम्मान करता है।
A: unless-stoppedप्रश्न: मैं खराब तैनाती को कैसे वापस लाऊं?
उ: क्योंकि आपने छवियों को संस्करण के अनुसार टैग किया है, पिछले टैग को पुनः तैनात करें ( पुराने संस्करण के साथ)। इसलिए
उ: क्योंकि आपने छवियों को संस्करण के अनुसार टैग किया है, पिछले टैग को पुनः तैनात करें ( पुराने संस्करण के साथ)। इसलिएdocker compose up -dउ: क्योंकि आपने छवियों को संस्करण के अनुसार टैग किया है, पिछले टैग को पुनः तैनात करें ( पुराने संस्करण के साथ)। इसलिएlatestउत्पादन में खतरनाक है – यह रोलबैक को अस्पष्ट बनाता है।
निष्कर्ष
डॉकर को सुरक्षित रूप से उत्पादन में तैनात करना कुछ विषयों पर निर्भर करता है:एक गैर-रूट उपयोगकर्ता के रूप में चलने वाली एक दुबली मल्टी-स्टेज छवि बनाएं, रनटाइम पर कॉन्फ़िगरेशन और रहस्यों को इंजेक्ट करें, स्वास्थ्य जांच जोड़ें, टीएलएस के लिए रिवर्स प्रॉक्सी के साथ ऐप को सामने रखें, स्वच्छ रोलबैक के लिए संस्करण के अनुसार छवियों को टैग करें, और अपने लॉग को कैप करें. यह सब एक कंपोज़ फ़ाइल में कैप्चर करें ताकि सेटअप पुनरुत्पादित हो सके। इन बुनियादी बातों को सही कर लें और आपका कंटेनरीकृत ऐप विश्वसनीय रूप से चलेगा, ट्रैफ़िक कम किए बिना अपडेट होगा, और कुछ गलत होने पर वापस रोल करना आसान होगा।
🔗 Share this article
✍️ Leave a Comment