आपने एक स्प्रिंग बूट एप्लिकेशन बनाया है। यह आपकी स्थानीय मशीन पर बढ़िया काम कर रहा है और अब, आपको एप्लिकेशन को कहीं और तैनात करने की आवश्यकता है। कुछ प्लेटफ़ॉर्म पर, आप सीधे जार फ़ाइल सबमिट कर सकते हैं और इसे तैनात किया जाएगा। कुछ स्थानों पर, आप एक वर्चुअल मशीन को स्पिन कर सकते हैं, वहां स्रोत कोड डाउनलोड कर सकते हैं, इसे बना सकते हैं और चला सकते हैं। लेकिन, अधिकांश समय आपको कंटेनरों का उपयोग करके एप्लिकेशन को तैनात करने की आवश्यकता होगी। अधिकांश समय, डॉकर का उपयोग कंटेनर में छवि बनाने और चलाने के लिए किया जाता है। साथ ही, जब आप जार फ़ाइल को कुछ प्लेटफ़ॉर्म पर अपलोड करते हैं, तो एप्लिकेशन हुड के नीचे एक कंटेनर के अंदर चलता है।
तो, इस ब्लॉग में, हम दिए गए स्प्रिंग बूट एप्लिकेशन के लिए डॉकर छवि बनाने के 3 अलग-अलग तरीके देखेंगे। चलो शुरू करो:
किसी भी एप्लिकेशन के लिए डॉकर छवि बनाने का सरल और अपर्याप्त तरीका एक साधारण डॉकरफाइल का उपयोग करना है जो छवि के अंदर जार फ़ाइल को कॉपी करता है और इसे जावा -जर कमांड का उपयोग करके चलाता है।
यहां डॉकरफाइल है जिसे आप प्रोजेक्ट के मूल में रख सकते हैं:
FROM eclipse-temurin:21-jre-ubi9-minimal ARG JAR_FILE COPY ${JAR_FILE} application.jar ENTRYPOINT ["java", "-jar", "/application.jar"]
हमने एक तर्क JAR_FILE निर्दिष्ट किया है जो उपयोग करने के लिए जार फ़ाइल का स्थान है।
उपरोक्त डॉकरफ़ाइल बनाने के बाद, डॉकर छवि बनाने के लिए नीचे दिए गए चरणों का उपयोग किया जाता है:
स्प्रिंग बूट प्रोजेक्ट के लिए जार फ़ाइल बनाएं:
./gradlew bootJar # For Gradle build system
या
./mvnw spring-boot:build-jar # For Maven build system
नवीनतम जार फ़ाइल का उपयोग करके डॉकर छवि बनाने के लिए डॉकरफ़ाइल का उपयोग करें। नीचे दिए गए आदेश में {IMAGE_NAME} को आवश्यक छवि नाम से और {JAR_FILE} को जेनरेट की गई जार फ़ाइल के पथ से बदलें। छवि नाम में एक टैग भी शामिल है, जैसे - mycompany/product-service:0.0.1-SNAPSHOT:
docker build --build-arg JAR_FILE={JAR_FILE} --tag {IMAGE_NAME} .
सत्यापित करें कि क्या डॉकर छवि निम्नलिखित कमांड का उपयोग करके बनाई गई है। आपको उपरोक्त आदेश में निर्दिष्ट नाम के साथ छवि देखने में सक्षम होना चाहिए:
docker images
हालांकि स्प्रिंग बूट उबर जार को डॉकर छवि के रूप में पैकेज करना संभव और आसान है (जैसा कि पिछली विधि में बताया गया है), डॉकर छवि में फैट जार को कॉपी करने और चलाने के कई नुकसान हैं। उदाहरण के लिए,
चूंकि हम स्प्रिंग बूट संस्करण को अपग्रेड करने की तुलना में अपना कोड अधिक बार संकलित करते हैं, इसलिए चीजों को थोड़ा और अलग करना बेहतर होता है। यदि हम उन जार फ़ाइलों (जिन्हें शायद ही कभी बदला जाता है) को एप्लिकेशन परत से पहले परत में रखते हैं, तो डॉकर को अक्सर केवल निचली परत को बदलने की आवश्यकता होती है और बाकी को अपने कैश से चुन सकते हैं।
एक स्तरित डॉकर छवि बनाने के लिए, हमें पहले एक स्तरित जार बनाना होगा। आजकल, यह ग्रैडल और मावेन में डिफ़ॉल्ट रूप से सक्षम है। आप निम्न सेटिंग का उपयोग करके स्तरित जार व्यवहार को सक्षम या अक्षम कर सकते हैं:
// build.gradle tasks.named("bootJar") { layered { enabled = false } }
// build.gradle.kts tasks.named("bootJar") { layered { enabled.set(false) } }
org.springframework.boot spring-boot-maven-plugin true
आप यह भी ट्यून कर सकते हैं कि परतें कैसे बनाई जाती हैं। ग्रेडेल या मेवेन कॉन्फ़िगरेशन के लिए दस्तावेज़ देखें।
नीचे डॉकरफाइल है, जिसका उपयोग स्तरित जार का लाभ उठाने और स्प्रिंग बूट एप्लिकेशन की एक स्तरित डॉकर छवि बनाने के लिए किया जा सकता है।
# Perform the extraction in a separate builder container FROM eclipse-temurin:21-jre-ubi9-minimal AS builder WORKDIR /builder # This points to the built jar file in the target folder # Adjust this to 'build/libs/*.jar' if you're using Gradle ARG JAR_FILE=target/*.jar # Copy the jar file to the working directory and rename it to application.jar COPY ${JAR_FILE} application.jar # Extract the jar file using an efficient layout RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted # This is the runtime container FROM eclipse-temurin:21-jre-ubi9-minimal WORKDIR /application # Copy the extracted jar contents from the builder container into the working directory in the runtime container # Every copy step creates a new docker layer # This allows docker to only pull the changes it really needs COPY --from=builder /builder/extracted/dependencies/ ./ COPY --from=builder /builder/extracted/spring-boot-loader/ ./ COPY --from=builder /builder/extracted/snapshot-dependencies/ ./ COPY --from=builder /builder/extracted/application/ ./ # Start the application jar - this is not the uber jar used by the builder # This jar only contains application code and references to the extracted jar files # This layout is efficient to start up and CDS friendly ENTRYPOINT ["java", "-jar", "application.jar"]
स्तरित डॉकर छवि बनाने के चरण मूल डॉकर छवि बनाने के समान हैं। कृपया वहां देखें।
अगर मैं आपसे कहूं कि आप डॉकरफ़ाइल बनाए बिना डॉकर छवि बना सकते हैं तो क्या होगा? हम क्लाउड नेटिव बिल्डपैक का उपयोग करके सीधे ग्राल्डे या मावेन प्लगइन से डॉकर छवियां बना सकते हैं। कुछ प्लेटफ़ॉर्म (जैसे हेरोकू या क्लाउड फाउंड्री) प्रदान की गई जार फ़ाइलों को चलाने योग्य छवियों में परिवर्तित करने के लिए बिल्डपैक का उपयोग करते हैं।
स्प्रिंग बूट में सीधे मावेन और ग्रैडल के लिए बिल्डपैक समर्थन शामिल है। हमें कोई अतिरिक्त प्लगइन शामिल करने की आवश्यकता नहीं है। बस नीचे दिया गया आदेश चलाएँ:
./gradlew bootBuildImage # For gradle build system
या
./mvnw spring-boot:build-image # For maven build system
उपरोक्त आदेश डिफ़ॉल्ट नाम {PROJECT_NAME}:${PROJECT_VERSION} के साथ एक छवि उत्पन्न करता है। यदि आप जेनरेट की गई छवि का नाम कॉन्फ़िगर करना चाहते हैं, तो आप नीचे दिए गए चरणों का पालन कर सकते हैं:
हम छवि का नाम सेट करने के लिए बूटबिल्डइमेज कार्य को इस तरह कॉन्फ़िगर कर सकते हैं:
// For build.gradle.kts val imagePrefix = "javarush" val dockerImageName = "docker-example" tasks.named("bootBuildImage") { imageName.set("${imagePrefix}/${dockerImageName}:${version}") }
// For build.gradle def imagePrefix = "javarush" def dockerImageName = "docker-example" tasks.named("bootBuildImage") { imageName = "${imagePrefix}/${dockerImageName}:${version}" }
हम किसी अन्य छवि नाम का उपयोग करने के लिए स्प्रिंग-बूट-मावेन-प्लगइन को कॉन्फ़िगर कर सकते हैं, जैसे:
... javarush org.springframework.boot spring-boot-maven-plugin ${imagePrefix}/${project.artifactId}:${project.version}
हम छवि बनाने के लिए कमांड चलाते समय छवि का नाम भी परिभाषित कर सकते हैं।
./gradlew bootBuildImage --imageName=javarush/docker-example:1.0.0 # For grade build system ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=javarush/docker-example:1.0.0 # For maven build system
आप ग्रैडल या मेवेन प्लगइन को और कॉन्फ़िगर करने के लिए दस्तावेज़ देख सकते हैं।
किसी भी स्प्रिंग बूट एप्लिकेशन के लिए डॉकर छवि बनाने की यह मेरी पसंदीदा विधि है।
एक बार जब आप डॉकर छवि बना लेते हैं, तो आपको यह सुनिश्चित करना होगा कि यह अपेक्षा के अनुरूप काम करता है। यह सुनिश्चित करने के बाद कि छवि बन गई है, आप इसे सीधे डॉकर रन कमांड का उपयोग करके चला सकते हैं। उदाहरण के लिए,
docker run -p "8080:8080" {IMAGE_NAME}
लेकिन, उत्पादन अनुप्रयोगों में छवियों का उपयोग इस तरह नहीं किया जाता है। डॉकर कंपोज़ का उपयोग कई डॉकर छवियों को चलाने और प्रबंधित करने के लिए किया जाता है।
इस ब्लॉग में, हमने देखा है कि विभिन्न तरीकों का उपयोग करके स्प्रिंग बूट अनुप्रयोगों के लिए डॉकर छवियां कैसे बनाई जाती हैं। आपके ऐप्स के लिए डॉकर छवियां बनाने में सक्षम होना एक आवश्यक कौशल है क्योंकि छवि ही वितरित की जाती है। लेख को अंत तक पढ़ने के लिए धन्यवाद. मैं इसकी सराहना करता हूं। मैं आपसे अगले में मिलूंगा. हमेशा की तरह, सभी फीडबैक और सुझावों का स्वागत है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3