Dockerfile जनरेटर
Node.js, Python, Go, Java, .NET, Rust या स्टैटिक साइट के लिए प्रोडक्शन-तैयार Dockerfile बनाएँ: मल्टी-स्टेज बिल्ड, non-root यूज़र और मेल खाता .dockerignore।
प्रोडक्शन में इमेज के सटीक संस्करण या digest तय करें और सुरक्षा अपडेट के लिए नियमित रूप से दोबारा बिल्ड करें।
संबंधित टूल्स
सभी देखेंDockerfile जनरेटर क्या है?
Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust या Nginx से परोसी जाने वाली स्टैटिक साइट के लिए मौजूदा बेस्ट प्रैक्टिस का पालन करने वाला Dockerfile बनाएँ। विकल्पों में छोटी इमेज के लिए मल्टी-स्टेज बिल्ड, non-root यूज़र के रूप में चलाना, रनटाइम संस्करण, पोर्ट और स्टार्ट कमांड शामिल हैं, और टूल मेल खाता .dockerignore भी बनाता है।
Dockerfile जनरेटर का उपयोग कैसे करें
- भाषा / स्टैक चुनें।
- रनटाइम संस्करण (इमेज टैग), पोर्ट और स्टार्ट फ़ाइल, मॉड्यूल, JAR या बाइनरी का नाम सेट करें।
- जब तक कोई कारण न हो मल्टी-स्टेज बिल्ड (छोटी इमेज) और non-root यूज़र के रूप में चलाएँ चुने रखें।
- Dockerfile और .dockerignore अपने प्रोजेक्ट रूट में डाउनलोड करें और
docker build -t myapp .चलाएँ।
उदाहरण
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
# syntax=docker/dockerfile:1 # ---- dependencies (production only) ---- FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev # ---- build ---- FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build # ---- runtime ---- FROM node:22-alpine ENV NODE_ENV=production WORKDIR /app COPY --from=deps --chown=node:node /app/node_modules ./node_modules COPY --from=build --chown=node:node /app/dist ./dist COPY --chown=node:node package.json ./ # The official Node images ship an unprivileged "node" user USER node EXPOSE 3000 CMD ["node", "dist/index.js"]
Dockerfile जनरेटर का उपयोग कब करें
सामान्य वेब सर्विस या API को समझदार डिफ़ॉल्ट के साथ जल्दी कंटेनराइज़ करने के लिए इसका उपयोग करें। बनी फ़ाइल को अपने प्रोजेक्ट के लिए जाँच लें: बिल्ड कमांड, आउटपुट फ़ोल्डर और एंट्री पॉइंट अलग होते हैं, और नेटिव डिपेंडेंसी को अतिरिक्त सिस्टम पैकेज की ज़रूरत हो सकती है। दोहराने योग्य प्रोडक्शन बिल्ड के लिए इमेज के सटीक संस्करण या डाइजेस्ट पिन करें।
Dockerfile जनरेटर कैसे काम करता है
हर स्टैक के लिए उसकी आधिकारिक इमेज के हिसाब से लिखा टेम्पलेट है। मल्टी-स्टेज बिल्ड पूरी SDK इमेज में इंस्टॉल और कंपाइल करते हैं और केवल नतीजा हल्के रनटाइम में कॉपी करते हैं: Node अलग स्टेज में npm ci --omit=dev से प्रोडक्शन डिपेंडेंसी इंस्टॉल करता है; Python virtualenv बनाकर उसे python:<ver>-slim में कॉपी करता है; Go स्टैटिक बाइनरी (CGO_ENABLED=0, -trimpath -ldflags="-s -w") को distroless/static:nonroot में कंपाइल करता है; Java JAR को केवल-JRE Temurin इमेज में कॉपी करता है; .NET aspnet रनटाइम इमेज में पब्लिश करता है और उसका बिल्ट-इन $APP_UID यूज़र इस्तेमाल करता है; Rust रिलीज़ बाइनरी को debian:bookworm-slim में कॉपी करता है। Non-root मोड इमेज का अपना अविशेषाधिकार वाला यूज़र (node, nonroot, app) इस्तेमाल करता है या UID 10001 वाला यूज़र बनाता है। डिपेंडेंसी मैनिफ़ेस्ट सोर्स से पहले कॉपी होते हैं ताकि केवल कोड बदलने पर Docker की लेयर कैश दोबारा इंस्टॉल छोड़ दे।
सामान्य उपयोग मामले
- डिप्लॉयमेंट के लिए Node.js या Python API को कंटेनराइज़ करना
- distroless रनटाइम से Go सर्विस की इमेज छोटी करना
- non-root Nginx से React/Vue/Astro बिल्ड परोसना
- Dockerfile बेस्ट प्रैक्टिस सिखाना या रिव्यू करना
सुरक्षा नोट
.env फ़ाइलें या क्रेडेंशियल कभी इमेज में COPY न करें; सीक्रेट रनटाइम पर या BuildKit secret mount से दें।
अक्सर पूछे जाने वाले प्रश्न
मल्टी-स्टेज बिल्ड क्यों इस्तेमाल करें?
कंपाइलर, डेव डिपेंडेंसी और सोर्स फ़ाइलें बिल्ड स्टेज में रहती हैं, इसलिए अंतिम इमेज छोटी होती है, तेज़ शुरू होती है और उसमें कम पैकेज होते हैं जिनमें कमज़ोरियाँ हो सकती हैं।
non-root यूज़र के रूप में क्यों चलाएँ?
अगर एप्लिकेशन से समझौता हो जाए तो हमलावर को कंटेनर के भीतर root नहीं मिलता, जिससे नुक़सान सीमित रहता है और कुछ कंटेनर-एस्केप तकनीकें रुक जाती हैं।
.dockerignore क्या करता है?
यह node_modules, .git और .env जैसी फ़ाइलों को बिल्ड कॉन्टेक्स्ट से बाहर रखता है, जिससे बिल्ड तेज़ होते हैं और सीक्रेट इमेज से बाहर रहते हैं।