"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > बिल्डपैक का उपयोग करके स्प्रिंग बूट एप्लिकेशन की डॉकर छवि बनाना

बिल्डपैक का उपयोग करके स्प्रिंग बूट एप्लिकेशन की डॉकर छवि बनाना

2024-11-05 को प्रकाशित
ब्राउज़ करें:368

Creating Docker Image of Spring Boot Application using Buildpacks

परिचय

आपने एक स्प्रिंग बूट एप्लिकेशन बनाया है। यह आपकी स्थानीय मशीन पर बढ़िया काम कर रहा है और अब, आपको एप्लिकेशन को कहीं और तैनात करने की आवश्यकता है। कुछ प्लेटफ़ॉर्म पर, आप सीधे जार फ़ाइल सबमिट कर सकते हैं और इसे तैनात किया जाएगा। कुछ स्थानों पर, आप एक वर्चुअल मशीन को स्पिन कर सकते हैं, वहां स्रोत कोड डाउनलोड कर सकते हैं, इसे बना सकते हैं और चला सकते हैं। लेकिन, अधिकांश समय आपको कंटेनरों का उपयोग करके एप्लिकेशन को तैनात करने की आवश्यकता होगी। अधिकांश समय, डॉकर का उपयोग कंटेनर में छवि बनाने और चलाने के लिए किया जाता है। साथ ही, जब आप जार फ़ाइल को कुछ प्लेटफ़ॉर्म पर अपलोड करते हैं, तो एप्लिकेशन हुड के नीचे एक कंटेनर के अंदर चलता है।

तो, इस ब्लॉग में, हम दिए गए स्प्रिंग बूट एप्लिकेशन के लिए डॉकर छवि बनाने के 3 अलग-अलग तरीके देखेंगे। चलो शुरू करो:

मूल कंटेनर छवि

किसी भी एप्लिकेशन के लिए डॉकर छवि बनाने का सरल और अपर्याप्त तरीका एक साधारण डॉकरफाइल का उपयोग करना है जो छवि के अंदर जार फ़ाइल को कॉपी करता है और इसे जावा -जर कमांड का उपयोग करके चलाता है।

डॉकरफाइल बनाएं

यहां डॉकरफाइल है जिसे आप प्रोजेक्ट के मूल में रख सकते हैं:

FROM eclipse-temurin:21-jre-ubi9-minimal

ARG JAR_FILE

COPY ${JAR_FILE} application.jar

ENTRYPOINT ["java", "-jar", "/application.jar"]

हमने एक तर्क JAR_FILE निर्दिष्ट किया है जो उपयोग करने के लिए जार फ़ाइल का स्थान है।

डॉकर छवि का निर्माण

उपरोक्त डॉकरफ़ाइल बनाने के बाद, डॉकर छवि बनाने के लिए नीचे दिए गए चरणों का उपयोग किया जाता है:

  1. स्प्रिंग बूट प्रोजेक्ट के लिए जार फ़ाइल बनाएं:

    ./gradlew bootJar # For Gradle build system
    

    या

    ./mvnw spring-boot:build-jar # For Maven build system
    
  2. नवीनतम जार फ़ाइल का उपयोग करके डॉकर छवि बनाने के लिए डॉकरफ़ाइल का उपयोग करें। नीचे दिए गए आदेश में {IMAGE_NAME} को आवश्यक छवि नाम से और {JAR_FILE} को जेनरेट की गई जार फ़ाइल के पथ से बदलें। छवि नाम में एक टैग भी शामिल है, जैसे - mycompany/product-service:0.0.1-SNAPSHOT:

    docker build --build-arg JAR_FILE={JAR_FILE} --tag {IMAGE_NAME} .
    
  3. सत्यापित करें कि क्या डॉकर छवि निम्नलिखित कमांड का उपयोग करके बनाई गई है। आपको उपरोक्त आदेश में निर्दिष्ट नाम के साथ छवि देखने में सक्षम होना चाहिए:

    docker images
    

स्तरित जार का उपयोग करके कुशल कंटेनर छवि

हालांकि स्प्रिंग बूट उबर जार को डॉकर छवि के रूप में पैकेज करना संभव और आसान है (जैसा कि पिछली विधि में बताया गया है), डॉकर छवि में फैट जार को कॉपी करने और चलाने के कई नुकसान हैं। उदाहरण के लिए,

  • उबर जार को बिना पैक किए चलाने पर कुछ अतिरिक्त खर्च होता है।
  • एप्लिकेशन के कोड और उसकी सभी निर्भरताओं को एक ही परत में रखना इष्टतम नहीं है।

चूंकि हम स्प्रिंग बूट संस्करण को अपग्रेड करने की तुलना में अपना कोड अधिक बार संकलित करते हैं, इसलिए चीजों को थोड़ा और अलग करना बेहतर होता है। यदि हम उन जार फ़ाइलों (जिन्हें शायद ही कभी बदला जाता है) को एप्लिकेशन परत से पहले परत में रखते हैं, तो डॉकर को अक्सर केवल निचली परत को बदलने की आवश्यकता होती है और बाकी को अपने कैश से चुन सकते हैं।

स्तरित जार सक्षम करें

एक स्तरित डॉकर छवि बनाने के लिए, हमें पहले एक स्तरित जार बनाना होगा। आजकल, यह ग्रैडल और मावेन में डिफ़ॉल्ट रूप से सक्षम है। आप निम्न सेटिंग का उपयोग करके स्तरित जार व्यवहार को सक्षम या अक्षम कर सकते हैं:

// build.gradle
tasks.named("bootJar") {
    layered {
        enabled = false
    }
}
// build.gradle.kts
tasks.named("bootJar") {
   layered {
      enabled.set(false)
   }
}

org.springframework.bootspring-boot-maven-plugintrue

आप यह भी ट्यून कर सकते हैं कि परतें कैसे बनाई जाती हैं। ग्रेडेल या मेवेन कॉन्फ़िगरेशन के लिए दस्तावेज़ देखें।

डॉकरफाइल बनाएं

नीचे डॉकरफाइल है, जिसका उपयोग स्तरित जार का लाभ उठाने और स्प्रिंग बूट एप्लिकेशन की एक स्तरित डॉकर छवि बनाने के लिए किया जा सकता है।

# 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.bootspring-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}

लेकिन, उत्पादन अनुप्रयोगों में छवियों का उपयोग इस तरह नहीं किया जाता है। डॉकर कंपोज़ का उपयोग कई डॉकर छवियों को चलाने और प्रबंधित करने के लिए किया जाता है।

निष्कर्ष

इस ब्लॉग में, हमने देखा है कि विभिन्न तरीकों का उपयोग करके स्प्रिंग बूट अनुप्रयोगों के लिए डॉकर छवियां कैसे बनाई जाती हैं। आपके ऐप्स के लिए डॉकर छवियां बनाने में सक्षम होना एक आवश्यक कौशल है क्योंकि छवि ही वितरित की जाती है। लेख को अंत तक पढ़ने के लिए धन्यवाद. मैं इसकी सराहना करता हूं। मैं आपसे अगले में मिलूंगा. हमेशा की तरह, सभी फीडबैक और सुझावों का स्वागत है।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/himanshu-pareek/creating-docker-image-of-spring-boot-application-using-buildpacks-5dbo?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 से संपर्क करें इसे हटाने के लिए .com
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3