Go Academy · पाठ

Go के लिए बहु-चरणीय Docker बिल्ड

scratch/alpine अंतिम इमेज के साथ Builder चरण

पाठ 1, कुल 4 में से13 चरण

Go के लिए बहु-चरणीय Docker बिल्ड, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बहु-चरणीय क्यों

Go कोड को संकलित करने वाला एकल-चरणीय निर्माण पूर्ण Go टूलचेन वाली बड़ी छवि बनाता है। बहु-चरणीय निर्माणों में एक चरण में संकलन किया जाता है और केवल बाइनरी को न्यूनतम अंतिम छवि में कॉपी किया जाता है।

मूल बहु-चरणीय Dockerfile

निर्माण चरण बाइनरी को संकलित करता है; अंतिम चरण उसे न्यूनतम आधार में कॉपी करता है:

FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server

FROM scratch
COPY --from=build /app/myapp /myapp
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/myapp"]

FROM scratch

FROM scratch छवि में कुछ भी नहीं होता — न शेल, न OS लाइब्रेरी। Go बाइनरी स्थिर रूप से लिंक की गई होनी चाहिए (CGO_ENABLED=0) और सभी आवश्यक फ़ाइलों को स्पष्ट रूप से शामिल करना चाहिए।

FROM distroless

Google की distroless छवियाँ बिना शेल के न्यूनतम OS लाइब्रेरी देती हैं (CA प्रमाणपत्र और समय-क्षेत्र डेटा) — libc या TLS प्रमाणपत्रों की आवश्यकता वाली बाइनरी के लिए scratch से अधिक सुरक्षित।

FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]

शेल के लिए FROM alpine

जब आपको त्रुटि-निवारण के लिए शेल की आवश्यकता हो या बाइनरी CGO का उपयोग करती हो, तब Alpine को अंतिम आधार के रूप में उपयोग करें। Alpine लगभग 5MB जोड़ता है, लेकिन इसमें शेल और पैकेज प्रबंधक शामिल होता है।

go.mod के लिए परत कैशिंग

पहले go.mod और go.sum कॉपी करें और स्रोत कोड कॉपी करने से पहले go mod download चलाएँ। निर्भरताएँ बदलने तक यह परत कैश रहती है, जिससे दोबारा निर्माण तेज़ होता है।

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...

-ldflags="-s -w"

-s प्रतीक तालिका हटाता है; -w DWARF त्रुटि-निवारण जानकारी हटाता है। दोनों मिलकर रनटाइम पर कोई प्रभाव डाले बिना बाइनरी का आकार 30-50% घटा देते हैं।

निर्माण तर्क

निर्माण के समय संस्करण की जानकारी डालने के लिए ARG का उपयोग करें:

ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .

गैर-रूट उपयोगकर्ता

सुरक्षा के लिए बाइनरी को गैर-रूट उपयोगकर्ता के रूप में चलाएँ। किसी आधार छवि में उपयोगकर्ता जोड़ें या distroless के nonroot टैग का उपयोग करें:

FROM gcr.io/distroless/static-debian12:nonroot

अंतिम छवि का आकार

scratch से बनी सामान्य Go बाइनरी 5-20 MB की होती है। Alpine लगभग 5MB जोड़ता है। पूर्ण golang छवि लगभग 800MB की होती है। बहु-चरणीय निर्माण हमले की सतह और छवि खींचने में लगने वाले समय को काफ़ी घटाते हैं।

.dockerignore

निर्माण संदर्भ से फ़ाइलों को बाहर रखने के लिए .dockerignore जोड़ें: vendor/, .git/, *.test, *.prof। इससे Docker निर्माण तेज़ होता है और संवेदनशील फ़ाइलों को शामिल होने से रोका जाता है।

.git
vendor
*.test
*.prof
.env

त्वरित जाँच

FROM scratch Docker छवि के लिए Go बाइनरी बनाते समय CGO_ENABLED=0 सेट करना क्यों आवश्यक है?

पुनरावलोकन: बहु-चरणीय Docker निर्माण

मुख्य बिंदु:

  • निर्माण चरण: golang छवि; अंतिम चरण: scratch/distroless/alpine
  • स्थिर बाइनरी के लिए CGO_ENABLED=0 (scratch के लिए आवश्यक)
  • परत कैशिंग के लिए पहले go.mod कॉपी करें; छोटी बाइनरी के लिए -ldflags="-s -w"
  • .dockerignore से .git, vendor और परीक्षण फ़ाइलों को बाहर रखें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Go के लिए बहु-चरणीय Docker बिल्ड” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Go के लिए बहु-चरणीय Docker बिल्ड” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Go के लिए बहु-चरणीय Docker बिल्ड” में मैं क्या सीखूँगा?

scratch/alpine अंतिम इमेज के साथ Builder चरण आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Go के लिए बहु-चरणीय Docker बिल्ड” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Go के लिए बहु-चरणीय Docker बिल्ड
  2. पर्यावरण कॉन्फ़िगरेशन और Secrets
  3. स्थानीय विकास के लिए Docker Compose
  4. हेल्थ चेक और प्रोडक्शन ट्यूनिंग
← Go Academy पर वापस जाएँ