Docker और Kotlin: डेवलपर्स के लिए एप्लिकेशन कंटेनरीकरण

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

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

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

Docker और Kotlin: एप्लिकेशन का कंटेनरीकरण



Kotlin में आधुनिक डेवलपमेंट में तेजी से कंटेनरीकरण के उपयोग की आवश्यकता होती है। Docker आपको एप्लिकेशन को सभी निर्भरताओं के साथ एक पृथक वातावरण में पैकेज करने की अनुमति देता है, जो डेवलपर की स्थानीय मशीन, टेस्ट सर्वर और production पर समान व्यवहार सुनिश्चित करता है। इस लेख में, हम सर्वोत्तम प्रथाओं और कोड उदाहरणों का उपयोग करके Kotlin प्रोजेक्ट्स को सही तरीके से कंटेनरीकृत करने का तरीका समझेंगे।



Kotlin एप्लिकेशन को कंटेनरीकृत क्यों करें?



Kotlin JVM के ऊपर काम करता है, इसलिए इस पर एप्लिकेशन Java इकोसिस्टम की सभी विशेषताओं को प्राप्त करते हैं। कंटेनरीकरण के मुख्य लाभ:



  • पर्यावरण की पुनरुत्पादन क्षमता — "मेरी मशीन पर काम करता है" जैसी समस्याओं से बचता है।
  • निर्भरताओं का अलगाव — JDK, लाइब्रेरी और सिस्टम उपयोगिताओं के संस्करण इमेज में फिक्स हो जाते हैं।
  • स्केलिंग — कंटेनरों को Kubernetes और अन्य ऑर्केस्ट्रेटर में आसानी से तैनात किया जा सकता है।
  • त्वरित तैनाती — Docker इमेज वर्चुअल मशीनों की तुलना में आकार में छोटी होती हैं।


Kotlin एप्लिकेशन के लिए Dockerfile बनाना



Gradle का उपयोग करके एक विशिष्ट Kotlin प्रोजेक्ट पर विचार करें। हमारा build.gradle.kts इस तरह दिख सकता है:



plugins {    kotlin("jvm") version "1.9.22"    application}

application { mainClass.set("com.example.MainKt")}

dependencies { implementation(kotlin("stdlib")) // अन्य निर्भरताएँ}


अब एक Dockerfile बनाते हैं। पहला विकल्प मल्टी-स्टेज बिल्ड (multistage build) है, जो संकलन चरण को निष्पादन चरण से अलग करता है:



# बिल्ड स्टेजFROM gradle:8.5-jdk21 AS buildCOPY --chown=gradle:gradle . /home/gradle/srcWORKDIR /home/gradle/srcRUN gradle build --no-daemon

# निष्पादन स्टेजFROM eclipse-temurin:21-jre-alpineWORKDIR /appCOPY --from=build /home/gradle/src/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


प्रमुख बिंदुओं को समझते हैं:



  • gradle:8.5-jdk21 — बिल्ड के लिए Gradle और JDK के साथ आधिकारिक इमेज।
  • eclipse-temurin:21-jre-alpine — Alpine Linux पर हल्की JRE इमेज (लगभग 80 MB)।
  • COPY --from=build — केवल बिल्ड किया गया JAR कॉपी करता है, स्रोत कोड और Gradle कैश को छोड़कर।
  • EXPOSE 8080 — दस्तावेज़ीकरण के लिए पोर्ट निर्दिष्ट करता है (इसे स्वचालित रूप से नहीं खोलता)।


इमेज बनाने के लिए निष्पादित करें:



docker build -t kotlin-app:latest .docker run -p 8080:8080 kotlin-app:latest


इमेज आकार का अनुकूलन



इमेज का आकार तैनाती की गति के लिए महत्वपूर्ण है। Kotlin एप्लिकेशन के लिए यहाँ कुछ तरीके दिए गए हैं:



1. कस्टम JRE बनाने के लिए jlink का उपयोग



यदि आपका एप्लिकेशन JDK के सभी मॉड्यूल का उपयोग नहीं करता है, तो आप न्यूनतम JRE बना सकते हैं:



# बिल्ड स्टेजFROM gradle:8.5-jdk21 AS buildCOPY . /appWORKDIR /appRUN gradle build --no-daemon

# कस्टम JRE बनाने का स्टेजFROM eclipse-temurin:21-jdk-alpine AS jre-builderRUN jlink \ --add-modules java.base,java.logging,java.naming,java.sql \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=2 \ --output /jre

# अंतिम स्टेजFROM alpine:3.19ENV JAVA_HOME=/jreENV PATH="${JAVA_HOME}/bin:${PATH}"COPY --from=jre-builder /jre /jreCOPY --from=build /app/build/libs/*.jar /app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "/app.jar"]


यह दृष्टिकोण इमेज के आकार को ~200 MB से घटाकर ~40-50 MB कर देता है।



2. Spring Boot layertools का उपयोग



Spring Boot (Kotlin के साथ) प्रोजेक्ट्स के लिए, Docker कैशिंग के लिए JAR को परतों में विभाजित किया जा सकता है:



# build.gradle.ktstasks.bootJar {    layered {        enabled = true    }}


Dockerfile में, परतों को अलग-अलग कॉपी करें, ```

ब्लॉग

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