Docker और Go: Golang में एप्लिकेशन कंटेनरीकरण शुरू से

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Docker और Go: Golang-एप्लिकेशन के कंटेनरीकरण के लिए पूर्ण मार्गदर्शिका



कंटेनरीकरण आधुनिक एप्लिकेशन को तैनात करने के लिए डी-फैक्टो मानक बन गया है। Go (Golang) भाषा कंटेनर वातावरण के लिए आदर्श रूप से उपयुक्त है: इसकी संकलित बाइनरी फ़ाइलों को रनटाइम की आवश्यकता नहीं होती है, और स्टैटिक लिंकिंग न्यूनतम Docker इमेज बनाने की अनुमति देती है। इस लेख में, हम Dockerfile लिखने से लेकर अंतिम इमेज के आकार को अनुकूलित करने तक, Go-एप्लिकेशन को कंटेनरीकृत करने की प्रक्रिया को समझेंगे।



Go और Docker एक आदर्श जोड़ी क्यों हैं



Go एक सिंगल स्टैटिक बाइनरी फ़ाइल में संकलित होता है जो सिस्टम लाइब्रेरी पर निर्भर नहीं करता है। इसका मतलब है कि कंटेनर में Go-एप्लिकेशन चलाने के लिए Go Runtime, इंटरप्रेटर या अतिरिक्त निर्भरताएँ स्थापित करने की आवश्यकता नहीं है। परिणामस्वरूप, आपको मिलता है:



  • न्यूनतम इमेज आकार — अक्सर 10-15 MB से कम
  • तेज़ स्टार्टअप — मिलीसेकंड, सेकंड नहीं
  • उच्च सुरक्षा — कम घटक = कम कमजोरियाँ
  • सरल डिप्लॉयमेंट — कई स्क्रिप्ट और लाइब्रेरी के बजाय एक बाइनरी फ़ाइल


आइए इसे Go पर एक सरल HTTP-सर्वर के उदाहरण से समझते हैं।



चरण 1: Go-एप्लिकेशन बनाएं



शुरू करने के लिए, हम एक सरल वेब एप्लिकेशन लिखेंगे जिसे हम कंटेनरीकृत करेंगे। main.go फ़ाइल बनाएं:



package main

import ( "fmt" "log" "net/http" "os")

func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Go कंटेनर से नमस्ते! 🐳") })

log.Printf("सर्वर पोर्ट %s पर शुरू हुआ", port) log.Fatal(http.ListenAndServe(":"+port, nil))}


यह एक न्यूनतम HTTP-सर्वर है जो PORT एनवायरनमेंट वेरिएबल (डिफ़ॉल्ट 8080) द्वारा निर्धारित पोर्ट पर सुनता है।



चरण 2: मल्टी-स्टेज बिल्ड



न्यूनतम Docker इमेज बनाने के लिए मल्टी-स्टेज बिल्ड का उपयोग किया जाता है। पहला चरण एप्लिकेशन को संकलित करना है, दूसरा केवल बाइनरी फ़ाइल के साथ अंतिम इमेज बनाना है। Dockerfile बनाएं:



# चरण 1: एप्लिकेशन बनाएंFROM golang:1.22-alpine AS builder

WORKDIR /app

# निर्भरताओं को कैश करने के लिए go.mod और go.sum कॉपी करेंCOPY go.mod go.sum ./RUN go mod download

# सोर्स कोड कॉपी करेंCOPY . .

# स्टैटिक बाइनरी फ़ाइल बनाएंRUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .

# चरण 2: अंतिम न्यूनतम इमेजFROM alpine:3.19

# HTTPS के लिए CA-सर्टिफिकेट जोड़ेंRUN apk --no-cache add ca-certificates

WORKDIR /root/

# पहले चरण से बाइनरी कॉपी करेंCOPY --from=builder /app/server .

# पोर्ट खोलेंEXPOSE 8080

# एप्लिकेशन चलाएंCMD ["./server"]


मुख्य बिंदुओं पर ध्यान दें:

  • golang:1.22-alpine — बिल्ड के लिए हल्की इमेज
  • CGO_ENABLED=0 — स्टैटिक लिंकिंग के लिए CGO बंद करें
  • alpine:3.19 — न्यूनतम Linux इमेज (~5 MB)
  • ca-certificates — यदि एप्लिकेशन HTTPS का उपयोग करता है तो आवश्यक


चरण 3: कंटेनर बनाएं और चलाएं



Docker इमेज बनाएं और कंटेनर चलाएं:



# इमेज बनाएंdocker build -t go-hello:latest .

# कंटेनर चलाएंdocker run -d -p 8080:8080 --name go-app go-hello:latest

# जांचेंcurl http://localhost:8080# आउटपुट: Go कंटेनर से नमस्ते! 🐳


प्राप्त इमेज का आकार जांचें:



docker images go-hello# REPOSITORY   TAG       IMAGE ID       CREATED          SIZE# go-hello     latest    abc123def456   10 seconds ago   14.2 MB


केवल 14.2 MB — यह Node.js (सैकड़ों MB) या Python (दसियों MB) पर इमेज की तुलना में नगण्य है।



चरण 4: प्रोडक्शन के लिए Dockerfile को अनुकूलित करें

ब्लॉग

पुस्तक अनुशंसाएँ