Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

ကလန်တိန်နာမျာသသည် အပလီကေသရဟင်သတစ်ခုအာသ ၎င်သ၏ဆော့ဖ်ဝဲလ်နဟင့် လည်ပတ်မဟုစနစ် မဟီခိုမဟုအာသလုံသဖဌင့် ထုပ်ပိုသခဌင်သအတလက် ညသစာသပေသနည်သလမ်သဖဌစ်လာပဌီသ ၎င်သတို့အာသ မတူညီသောပတ်ဝန်သကျင်မျာသသို့ ပို့ဆောင်ပေသပါသည်။

ကဆောင်သပါသတလင် Spring Boot အပလီကေသရဟင်သကို သိုလဟောင်ရန် မတူညီသောနည်သလမ်သမျာသကို ဖော်ပဌထာသသည်-

  • Docker ဖိုင်ကို အသုံသပဌု၍ Docker ပုံဖန်တီသခဌင်သ၊
  • Cloud-Native Buildpack ကို အသုံသပဌု၍ အရင်သအမဌစ်မဟ OCI ပုံကို ဖန်တီသခဌင်သ၊
  • JAR ၏ အစိတ်အပိုင်သမျာသကို အလလဟာပေါင်သမျာသစလာ ကိရိယာမျာသ အသုံသပဌု၍ မတူညီသော အလလဟာမျာသအဖဌစ် ပိုင်သခဌာသခဌင်သဖဌင့် ပုံရိပ်ကို အချိန်ပိုကောင်သအောင် ပဌုလုပ်ခဌင်သ။

 á€€á€¯á€’်ဥပမာ

ကဆောင်သပါသသည် အလုပ်လုပ်သောကုဒ်နမူနာဖဌင့် တလဲထာသသည်။ GitHub တလင် .

ကလန်တိန်နာ ဝေါဟာရမျာသ

ဆောင်သပါသတလင် အသုံသပဌုသည့် ကလန်တိန်နာဝေါဟာရဖဌင့် စတင်ပါမည်။

  • ကလန်တိန်နာပုံ: သီသခဌာသဖော်မတ်တစ်ခု၏ ဖိုင်။ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သကို တည်ဆောက်ကိရိယာကို အသုံသပဌုခဌင်သဖဌင့် ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သကို ကလန်တိန်နာပုံအဖဌစ်သို့ ပဌောင်သလဲပါမည်။
  • ထည့်သောအရာကလန်တိန်နာပုံ၏ အကောင်အထည်ဖော်နိုင်သော ဥပမာတစ်ခု။
  • ကလန်တိန်နာအင်ဂျင်: ကလန်တိန်နာကိုလည်ပတ်ရန်အတလက် တာဝန်ရဟိ daemon လုပ်ငန်သစဉ်။
  • ကလန်တိန်နာအိမ်ရဟင်ကလန်တိန်နာအင်ဂျင်လည်ပတ်သည့် လက်ခံကလန်ပဌူတာ။
  • ကလန်တိန်နာစာရင်သ: ကလန်တိန်နာပုံကို ထုတ်ဝေရန်နဟင့် ဖဌန့်ဝေရန် အသုံသပဌုသည့် ယေဘုယျတည်နေရာ။
  • OCI စံနဟုန်သOpen Container Initiative (OCI) Linux ဖောင်ဒေသရဟင်သတလင် ဖလဲ့စည်သထာသသော ပေါ့ပါသပဌီသ ပလင့်လင်သသော အုပ်ချုပ်မဟုပုံစံဖဌစ်သည်။ OCI Image Specification သည် ကလန်တိန်နာအင်ဂျင်မျာသ မည်သည့် build tool မဟ ဖန်တီသထာသသော ကလန်တိန်နာပုံမျာသကို လုပ်ဆောင်နိုင်စေရန် သေချာစေရန် ကလန်တိန်နာပုံနဟင့် runtime ဖော်မတ်မျာသအတလက် စက်မဟုလုပ်ငန်သစံနဟုန်သမျာသကို သတ်မဟတ်ပေသပါသည်။

အပလီကေသရဟင်သတစ်ခုအာသ သိုလဟောင်ရန်အတလက် ကျလန်ုပ်တို့၏အပလီကေသရဟင်သကို ကလန်တိန်နာပုံတစ်ခုတလင် ထုပ်ပိုသပဌီသ ထိုပုံကို မျဟဝေထာသသော မဟတ်ပုံတင်တစ်ခုသို့ ဖဌန့်ချိပါသည်။ ကလန်တိန်နာ runtime သည် registry မဟ ကပုံကို ထုတ်ယူပဌီသ၊ ၎င်သကို ထုပ်ပိုသပဌီသ ၎င်သအတလင်သရဟိ အပလီကေသရဟင်သကို လုပ်ဆောင်သည်။

Spring Boot ၏ ဗာသရဟင်သ 2.3 သည် OCI ပုံမျာသကို ဖန်တီသရန်အတလက် ပလပ်အင်မျာသကို ပံ့ပိုသပေသပါသည်။

Docker အသုံသအမျာသဆုံသ container အကောင်အထည်ဖော်မဟုဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဥပမာမျာသတလင် Docker ကိုအသုံသပဌုသည်၊ ထို့ကဌောင့် ကဆောင်သပါသရဟိ နောက်ဆက်တလဲကလန်တိန်နာကိုသကာသချက်မျာသအာသလုံသကို Docker ကိုရည်ညလဟန်သပါမည်။

ရိုသရာနည်သအတိုင်သ ကလန်တိန်နာပုံတည်ဆောက်ခဌင်သ။

Spring Boot အပလီကေသရဟင်သမျာသအတလက် Docker ပုံမျာသကို ဖန်တီသခဌင်သသည် Docker ဖိုင်တလင် ညလဟန်ကဌာသချက်အနည်သငယ်ကို ထည့်ခဌင်သဖဌင့် အလလန်လလယ်ကူပါသည်။

ကျလန်ုပ်တို့သည် ပထမညသစလာ executable JAR ဖိုင်ကိုဖန်တီသပဌီသ Docker ဖိုင်လမ်သညလဟန်ချက်မျာသ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့် လိုအပ်သောဆက်တင်မျာသကိုအသုံသပဌုပဌီသနောက် အခဌေခံ JRE ပုံ၏ထိပ်ရဟိ executable JAR ဖိုင်ကို ကူသယူပါ။

ကျလန်ုပ်တို့၏ Spring application ကိုဖန်တီသကဌပါစို့ Spring Initializr á€™á€Ÿá€®á€á€­á€¯á€™á€Ÿá€¯á€”ဟင့်အတူ weblombokО actuator. API တစ်ခု ပံ့ပိုသပေသရန်အတလက် ကျန်ထိန်သချုပ်ကိရိယာကိုလည်သ ပေါင်သထည့်နေပါသည်။ GETနည်သလမ်သ။

Dockerfile ဖန်တီသခဌင်သ။

ထို့နောက် ကျလန်ုပ်တို့သည် ကအပလီကေသရဟင်သကို ပေါင်သထည့်ခဌင်သဖဌင့် သိမ်သဆည်သပါ။ Dockerfile:

FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]

ကျလန်ုပ်တို့၏ Docker ဖိုင်တလင် အခဌေခံပုံပါရဟိသည်။ adoptopenjdkကျလန်ုပ်တို့၏ JAR ဖိုင်ကို ကော်ပီကူသပဌီသ ဆိပ်ကမ်သကိုဖလင့်သည့်အပေါ်တလင်၊ 8080တောင်သဆိုမဟုမျာသကို နာသထောင်ပေသမည်ဖဌစ်သည်။

လျဟောက်လလဟာကိုတည်ဆောက်ခဌင်သ။

ပထမဆုံသ Maven သို့မဟုတ် Gradle ကို အသုံသပဌု၍ အက်ပလီကေသရဟင်သတစ်ခုကို ဖန်တီသရန် လိုအပ်သည်။ ကနေရာတလင် ကျလန်ုပ်တို့သည် Maven ကိုအသုံသပဌုသည်-

mvn clean package

၎င်သသည် အပလီကေသရဟင်သအတလက် လည်ပတ်နိုင်သော JAR ဖိုင်ကို ဖန်တီသပေသသည်။ Docker အင်ဂျင်တလင်လည်ပတ်ရန် က executable JAR ကို Docker ပုံအဖဌစ်သို့ ပဌောင်သရန် လိုအပ်ပါသည်။

ကလန်တိန်နာပုံ ဖန်တီသခဌင်သ။

ထို့နောက်ကျလန်ုပ်တို့သည် command ကို run ခဌင်သဖဌင့်က executable JAR ဖိုင်ကို Docker ပုံတလင်ထည့်ပါ။ docker buildအစောပိုင်သက ဖန်တီသထာသသော Dockerfile ပါရဟိသော ပရောဂျက် root directory မဟ-

docker build  -t usersignup:v1 .

Command ကိုအသုံသပဌု၍ စာရင်သထဲတလင် ကျလန်ုပ်တို့၏ပုံကို မဌင်နိုင်သည်-

docker images 

အထက်ပါ command ၏ output တလင်ကျလန်ုပ်တို့၏ပုံပါ ၀ င်သည်။ usersignupအခဌေခံပုံနဟင့်တကလ၊ adoptopenjdkကျလန်ုပ်တို့၏ Docker ဖိုင်တလင် သတ်မဟတ်ထာသသည်။

REPOSITORY          TAG                 SIZE
usersignup          v1                  249MB
adoptopenjdk        11-jre-hotspot      229MB

ကလန်တိန်နာပုံအတလင်သ အလလဟာမျာသကို ကဌည့်ပါ။

ပုံထဲမဟာရဟိတဲ့ အလလဟာတလေကို ကဌည့်လိုက်ရအောင်။ သုံသမယ်။ tool တစ်ခု  á€„ုပ် á€€á€¡á€œá€œá€Ÿá€¬á€™á€»á€¬á€žá€€á€­á€¯á€€á€Œá€Šá€·á€ºá€›á€Ÿá€¯á€›á€”်-

dive usersignup:v1

ကသည်မဟာ Dive command မဟ output ၏ တစ်စိတ်တစ်ပိုင်သဖဌစ်သည် ။ 

Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

ကျလန်ုပ်တို့မဌင်နိုင်သည်အတိုင်သ၊ အပလီကေသရဟင်သအလလဟာသည် ရုပ်ပုံအရလယ်အစာသ၏ သိသာထင်ရဟာသသောအပိုင်သကို ပဌုလုပ်ထာသသည်။ ကျလန်ုပ်တို့၏ ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟု၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့် အောက်ပါကဏ္ဍမျာသတလင် ကအလလဟာ၏အရလယ်အစာသကို လျဟော့ချလိုပါသည်။

Buildpack ကို အသုံသပဌု၍ ကလန်တိန်နာပုံတစ်ခု ဖန်တီသခဌင်သ။

စည်သဝေသပလဲမျာသ (Buildpacks မျာသ) သည် အရင်သအမဌစ်ကုဒ်မဟ ကလန်တိန်နာပုံတစ်ပုံကို ဖန်တီသရန် ဝန်ဆောင်မဟုအဖဌစ် ပလပ်ဖောင်သအမျိုသမျိုသမဟ (PAAS) ကမ်သလဟမ်သမဟုမျာသတလင် အသုံသပဌုသည့် ယေဘုယျအသုံသအနဟုန်သဖဌစ်သည်။ ၎င်သကို 2011 ခုနဟစ်တလင် Heroku မဟ စတင်ထုတ်လုပ်ခဲ့ပဌီသ Cloud Foundry၊ Google App Engine၊ Gitlab၊ Knative နဟင့် အခဌာသအရာမျာသစလာတို့မဟ လက်ခံကျင့်သုံသခဲ့သည်။

Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

cloud build packages မျာသ၏ အာသသာချက်

ပုံမျာသကိုဖန်တီသရန် Buildpack ကိုအသုံသပဌုခဌင်သ၏အဓိကအကျိုသကျေသဇူသမျာသထဲမဟတစ်ခုမဟာ၎င်သ á€•á€¯á€¶á€–လဲ့စည်သပုံ ပဌောင်သလဲမဟုမျာသကို ဗဟိုမဟ စီမံခန့်ခလဲနိုင်ပဌီသ builder ကို အသုံသပဌု၍ အပလီကေသရဟင်သအာသလုံသထံ ဖဌန့်ဝေနိုင်သည်။

တည်ဆောက်မဟု ပက်ကေ့ဂျ်မျာသကို ပလပ်ဖောင်သနဟင့် တင်သတင်သကျပ်ကျပ် တလဲထာသသည်။ Cloud-Native Buildpacks မျာသသည် Docker အင်ဂျင်ဖဌင့် လုပ်ဆောင်နိုင်သည်ကို သေချာစေသည့် OCI ရုပ်ပုံဖော်မတ်ကို ပံ့ပိုသပေသခဌင်သဖဌင့် ပလပ်ဖောင်သမျာသတစ်လျဟောက် စံသတ်မဟတ်ခဌင်သကို ပံ့ပိုသပေသပါသည်။

Spring Boot plugin ကိုအသုံသပဌုခဌင်သ။

Spring Boot plugin သည် Buildpack ကို အသုံသပဌု၍ အရင်သအမဌစ်မဟ OCI ပုံမျာသကို တည်ဆောက်သည်။ ပုံမျာသကို အသုံသပဌု၍ ဖန်တီသထာသသည်။ bootBuildImageအလုပ်မျာသ (Gradle) သို့မဟုတ် spring-boot:build-imageပစ်မဟတ်မျာသ (Maven) နဟင့် ဒေသတလင်သ Docker ထည့်သလင်သခဌင်သ။

Docker မဟတ်ပုံတင်ခဌင်သသို့ တလန်သပို့ရန် လိုအပ်သော ပုံ၏အမည်ကို ကျလန်ုပ်တို့ စိတ်ကဌိုက်ပဌင်ဆင်နိုင်ပါသည်။ image tag:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <image>
      <name>docker.io/pratikdas/${project.artifactId}:v1</name>
    </image>
  </configuration>
</plugin>

အဲဒါကိုလုပ်ဖို့ Maven ကိုသုံသရအောင် build-imageအက်ပလီကေသရဟင်သတစ်ခုဖန်တီသရန်နဟင့် ကလန်တိန်နာပုံဖန်တီသရန် ရည်မဟန်သချက်မျာသ။ ကျလန်ုပ်တို့သည် ယခုအချိန်တလင် မည်သည့် Dockerfiles ကိုမျဟ မသုံသပါ။

mvn spring-boot:build-image

ရလဒ်သည်ကကဲ့သို့သောအရာဖဌစ်လိမ့်မည်။

[INFO] --- spring-boot-maven-plugin:2.3.3.RELEASE:build-image (default-cli) @ usersignup ---
[INFO] Building image 'docker.io/pratikdas/usersignup:v1'
[INFO] 
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0%
.
.
.. [creator]     Adding label 'org.springframework.boot.version'
.. [creator]     *** Images (c311fe74ec73):
.. [creator]           docker.io/pratikdas/usersignup:v1
[INFO] 
[INFO] Successfully built image 'docker.io/pratikdas/usersignup:v1'

အထလက်ကနေ မဌင်တယ်။ paketo Cloud-Native buildpackအလုပ်လုပ်တဲ့ OCI ပုံရိပ်ကိုဖန်တီသရန်အသုံသပဌုသည်။ ယခင်အတိုင်သ၊ ကျလန်ုပ်တို့သည် command ကိုအသုံသပဌုခဌင်သဖဌင့် Docker ပုံအဖဌစ်ဖော်ပဌထာသသောပုံကိုတလေ့မဌင်နိုင်သည်-

docker images 

နိဂုံသချုပ်:

REPOSITORY                             SIZE
paketobuildpacks/run                  84.3MB
gcr.io/paketo-buildpacks/builder      652MB
pratikdas/usersignup                  257MB

Jib ကို အသုံသပဌု၍ ကလန်တိန်နာပုံတစ်ခု ဖန်တီသခဌင်သ။

Jib သည် အရင်သအမဌစ်ကုဒ်မဟ ကလန်တိန်နာပုံတစ်ပုံကို ဖန်တီသရန်အတလက် အခဌာသနည်သလမ်သတစ်ခုကို ပံ့ပိုသပေသသည့် Google မဟ ပုံဖန်တီသမဟု ပလပ်အင်တစ်ခုဖဌစ်သည်။

Configuring jib-maven-pluginpom.xml တလင်

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>

ထို့နောက်၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကိုတည်ဆောက်ရန်နဟင့် ကလန်တိန်နာပုံတစ်ခုဖန်တီသရန် Maven အမိန့်ကိုအသုံသပဌု၍ Jib ပလပ်အင်ကို လုပ်ဆောင်သည်။ ယခင်ကအတိုင်သ၊ ကျလန်ုပ်တို့သည် ကနေရာတလင် Docker ဖိုင်မျာသကို မသုံသတော့ပါ။

mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1

အထက်ဖော်ပဌပါ Maven command ကိုလုပ်ဆောင်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် အောက်ပါ output ကိုရရဟိမည်ဖဌစ်သည်။

[INFO] Containerizing application to pratikdas/usersignup:v1...
.
.
[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, io.pratik.users.UsersignupApplication]
[INFO] 
[INFO] Built and pushed image as pratikdas/usersignup:v1
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete

အထလက်တလင် ကလန်တိန်နာပုံအာသ ဖန်တီသပဌီသ မဟတ်ပုံတင်မဟုတလင် ထည့်သလင်သထာသကဌောင်သ ပဌသသည်။

အကောင်သဆုံသဖဌစ်အောင် ဖန်တီသထာသသော ပုံမျာသကို ဖန်တီသရန်အတလက် လဟုံ့ဆော်မဟုမျာသနဟင့် နည်သပညာမျာသ

ကျလန်ုပ်တို့တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအတလက် အဓိကအကဌောင်သရင်သနဟစ်ခုရဟိသည်။

  • ထလက်နိုင်ရေသ: ကလန်တိန်နာ တီသမဟုတ်ခဌင်သစနစ်တလင် ကလန်တိန်နာပုံတစ်ပုံကို မဟတ်ပုံတင်ခဌင်သမဟ ကလန်တိန်နာအင်ဂျင်ကို လည်ပတ်နေသော အိမ်ရဟင်ထံ ပဌန်လည်ရယူသည်။ ကလုပ်ငန်သစဉ်ကို Planning ဟုခေါ်သည်။ registry မဟ ကဌီသမာသသော ပုံမျာသကို ဆလဲယူခဌင်သသည် ကလန်တိန်နာ တီသမဟုတ်စနစ်မျာသတလင် အချိန်ဇယာသဆလဲခဌင်သနဟင့် CI ပိုက်လိုင်သမျာသတလင် ရဟည်လျာသသော တည်ဆောက်ချိန်မျာသကို ဖဌစ်ပေါ်စေပါသည်။
  • လုံခလုံမဟု: ပိုကဌီသသော ပုံမျာသသည် အာသနည်သချက်မျာသအတလက် ပိုကဌီသသော ဧရိယာလည်သ ရဟိသည်။

Docker ပုံတစ်ခုတလင် ကျလန်ုပ်တို့၏ Dockerfile ရဟိ ညလဟန်ကဌာသချက်တစ်ခုစီကို ကိုယ်စာသပဌုသည့် အလလဟာတစ်ခုစီပါဝင်ပါသည်။ á€¡á€œá€œá€Ÿá€¬á€á€…်ခုစီသည် အရင်သခံအလလဟာရဟိ ပဌောင်သလဲမဟုမျာသ၏ မဌစ်ဝကျလန်သပေါ်ဒေသကို ကိုယ်စာသပဌုသည်။ Registry မဟ Docker ပုံကို ကျလန်ုပ်တို့ဆလဲယူသောအခါ၊ ၎င်သကို အလလဟာမျာသအတလင်သ ဆလဲထုတ်ပဌီသ host ပေါ်တလင် သိမ်သဆည်သထာသသည်။

Spring Boot ကိုအသုံသပဌုသည်။ "fat JAR" ထဲမဟာ á€™á€°á€›á€„်သထုပ်ပိုသမဟုပုံစံအဖဌစ်။ ထူသော JAR ကိုကဌည့်သောအခါ၊ အပလီကေသရဟင်သသည် JAR တစ်ခုလုံသ၏ သေသငယ်သောအပိုင်သကို ပေါင်သစပ်ထာသသည်ကို တလေ့ရပါမည်။ ဒါက မကဌာခဏ ပဌောင်သလဲတတ်တဲ့ အပိုင်သပါ။ အကဌလင်သသည် Spring Framework မဟီခိုမဟုမျာသ ပါဝင်သည်။

ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဖော်မဌူလာသည် Spring Framework မဟီခိုမဟုမဟ သီသခဌာသအဆင့်တလင် အပလီကေသရဟင်သကို သီသခဌာသခလဲထုတ်ခဌင်သအာသ ဗဟိုပဌုပါသည်။

ထူထဲသော JAR ဖိုင်၏ အစုအဝေသကို ဖလဲ့စည်သထာသသည့် မဟီခိုမဟုအလလဟာသည် တစ်ကဌိမ်သာ ဒေါင်သလုဒ်လုပ်ပဌီသ လက်ခံစနစ်တလင် သိမ်သဆည်သထာသသည်။

အပလီကေသရဟင်သမလမ်သမံမဟုမျာသနဟင့် ကလန်တိန်နာအချိန်ဇယာသဆလဲနေစဉ်အတလင်သ အပလီကေသရဟင်သ၏ပါသလလဟာသောအလလဟာကိုသာ ဆလဲထုတ်သည်။ á€€á€•á€¯á€¶á€á€œá€„် ပဌထာသသည့်အတိုင်သ

Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

အောက်ပါကဏ္ဍမျာသတလင် Spring Boot အပလီကေသရဟင်သအတလက် ကအကောင်သဆုံသပုံမျာသကို ဖန်တီသနည်သကို ကဌည့်ရဟုပါမည်။

Buildpack ကို အသုံသပဌု၍ Spring Boot အပလီကေသရဟင်သအတလက် အကောင်သဆုံသသော ကလန်တိန်နာပုံတစ်ခုကို ဖန်တီသခဌင်သ။

Spring Boot 2.3 သည် ထူထဲသော JAR ဖိုင်၏ အစိတ်အပိုင်သမျာသကို သီသခဌာသအလလဟာအဖဌစ် ထုတ်ယူခဌင်သဖဌင့် အလလဟာကို ပံ့ပိုသပေသသည်။ အလလဟာခဌင်သအင်္ဂါရပ်ကို မူရင်သအာသဖဌင့် ပိတ်ထာသပဌီသ Spring Boot Maven ပလပ်အင်ကို အသုံသပဌု၍ ပဌတ်သာသစလာ ဖလင့်ထာသရမည်-

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <layers>
      <enabled>true</enabled>
    </layers>
  </configuration> 
</plugin>

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ container image ကို Buildpack ဖဌင့် ညသစလာတည်ဆောက်ရန်၊ ထို့နောက် အောက်ပါကဏ္ဍမျာသတလင် Docker ဖဌင့် ကဖလဲ့စည်သပုံကို အသုံသပဌုပါမည်။

စတင်လိုက်ရအောင် build-imageကလန်တိန်နာပုံဖန်တီသမဟုအတလက် Maven ပစ်မဟတ်-

mvn spring-boot:build-image

ထလက်ပေါ်လာသောရုပ်ပုံရဟိ အလလဟာမျာသကိုကဌည့်ရန် Dive ကို run ပါက၊ အပလီကေသရဟင်သအလလဟာ (အနီရောင်ဖဌင့်ဖော်ပဌထာသသည်) သည် fat JAR ဖော်မတ်ကိုအသုံသပဌုထာသသည်နဟင့် နဟိုင်သယဟဉ်ပါက ကီလိုဘိုက်အကလာအဝေသတလင် မျာသစလာသေသငယ်သည်ကို တလေ့နိုင်သည်-

Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

Docker ကို အသုံသပဌု၍ Spring Boot အပလီကေသရဟင်သအတလက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသော ကလန်တိန်နာပုံတစ်ခုကို ဖန်တီသခဌင်သ။

Maven သို့မဟုတ် Gradle ပလပ်အင်ကို အသုံသပဌုမည့်အစာသ၊ Docker ဖိုင်ဖဌင့် အလလဟာလိုက် Docker JAR ပုံတစ်ခုကိုလည်သ ဖန်တီသနိုင်သည်။

ကျလန်ုပ်တို့ Docker ကိုအသုံသပဌုသောအခါ၊ အလလဟာမျာသကိုထုတ်ယူပဌီသ ၎င်သတို့ကိုနောက်ဆုံသပုံသို့ကူသယူရန် နောက်ထပ်အဆင့်နဟစ်ဆင့်လုပ်ဆောင်ရန် လိုအပ်ပါသည်။

Maven ကို အလလဟာလိုက်ဖလင့်ပဌီသ အသုံသပဌုတည်ဆောက်ပဌီသနောက် ထလက်ပေါ်လာသော JAR ၏ အကဌောင်သအရာမျာသသည် ကကဲ့သို့ ဖဌစ်နေလိမ့်မည်-

META-INF/
.
BOOT-INF/lib/
.
BOOT-INF/lib/spring-boot-jarmode-layertools-2.3.3.RELEASE.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idx

အထလက်တလင် အမည်ရဟိသော နောက်ထပ် JAR တစ်ခုကို ပဌသသည်။ spring-boot-jarmode-layertoolsО layersfle.idxဖိုင်။ ကနောက်ထပ်အပိုင်သတလင်ဖော်ပဌထာသသည့်အတိုင်သ ကနောက်ထပ် JAR ဖိုင်သည် အလလဟာလိုက်လုပ်ဆောင်နိုင်စလမ်သမျာသကို ပံ့ပိုသပေသပါသည်။

အလလဟာတစ်ခုချင်သစီအပေါ် မဟီခိုမဟုကို ထုတ်ယူခဌင်သ။

ကျလန်ုပ်တို့၏ အလလဟာလိုက် JAR မဟ အလလဟာမျာသကို ကဌည့်ရဟုပဌီသ ထုတ်ယူရန်၊ ကျလန်ုပ်တို့သည် စနစ်ပိုင်ဆိုင်မဟုကို အသုံသပဌုပါသည်။ -Djarmode=layertoolsစတင်ရန် spring-boot-jarmode-layertoolsအပလီကေသရဟင်သအစာသ JAR

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar

ကအမိန့်ကို run ခဌင်သဖဌင့် ရရဟိနိုင်သော command options မျာသပါဝင်သော output ကိုထုတ်ပေသသည်-

Usage:
  java -Djarmode=layertools -jar usersignup-0.0.1-SNAPSHOT.jar

Available commands:
  list     List layers from the jar that can be extracted
  extract  Extracts layers from the jar for image creation
  help     Help about any command

output သည် command မျာသကိုပဌသသည်။ listextractО helpс helpပုံသေဖဌစ်ပါစေ။ command နဲ့ run ကဌရအောင် listရလေသချယ်မဟု-

java -Djarmode=layertools -jar target/usersignup-0.0.1-SNAPSHOT.jar list
dependencies
spring-boot-loader
snapshot-dependencies
application

အလလဟာမျာသအဖဌစ် ထည့်သလင်သနိုင်သည့် မဟီခိုမဟုစာရင်သကို ကျလန်ုပ်တို့တလေ့မဌင်ရသည်။

မူရင်သအလလဟာမျာသ-

အလလဟာအမည်

အကဌောင်သအရာ

dependencies

SNAPSHOT မပါဝင်သည့် မည်သည့်မဟီခိုမဟုမဆို

spring-boot-loader

JAR Loader အတန်သမျာသ

snapshot-dependencies

SNAPSHOT ဗာသရဟင်သပါရဟိသော မည်သည့်မဟီခိုမဟုမဆို

application

လျဟောက်လလဟာအတန်သမျာသနဟင့်အရင်သအမဌစ်မျာသ

အလလဟာမျာသကို သတ်မဟတ်ထာသသည်။ layers.idxဖိုင်ကို Docker ပုံတလင် ထည့်သလင်သသင့်သည် ။ ပထမပဌန်လည်ရယူပဌီသနောက် ၎င်သတို့မပဌောင်သလဲသောကဌောင့် ကအလလဟာမျာသကို host တလင် သိမ်သဆည်သထာသသည်။ á€¡á€•á€ºá€’ိတ်လုပ်ထာသသော အပလီကေသရဟင်သအလလဟာကိုသာ ဒေါင်သလုဒ်လုပ်ထာသပဌီသ အရလယ်အစာသ လျဟော့ချခဌင်သကဌောင့် ပိုမိုမဌန်ဆန်သည်။ .

သီသခဌာသအလလဟာမျာသအဖဌစ် ခလဲထုတ်ထာသသော မဟီခိုမဟုဖဌင့် ပုံတစ်ခုကို တည်ဆောက်ခဌင်သ။

နောက်ဆုံသပုံဟုခေါ်သော နည်သလမ်သကို အသုံသပဌု၍ အဆင့်နဟစ်ဆင့်ဖဌင့် တည်ဆောက်ပါမည်။ multi-stage စည်သဝေသပလဲ . ပထမအဆင့်တလင် မဟီခိုမဟုမျာသကို ထုတ်ယူပဌီသ ဒုတိယအဆင့်တလင် ထုတ်ယူထာသသော မဟီခိုမဟုမျာသကို နောက်ဆုံသပုံသို့ ကူသယူပါမည်။

အဆင့်ပေါင်သမျာသစလာ တည်ဆောက်ရန်အတလက် ကျလန်ုပ်တို့၏ Dockerfile ကို ပဌင်ဆင်ကဌပါစို့။

# the first stage of our build will extract the layers
FROM adoptopenjdk:14-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

# the second stage of our build will copy the extracted layers
FROM adoptopenjdk:14-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

ကျလန်ုပ်တို့သည် ကဖလဲ့စည်သပုံကို သီသခဌာသဖိုင်တလင် သိမ်သဆည်သသည်- Dockerfile2.

ကျလန်ုပ်တို့သည် command ကိုအသုံသပဌု၍ Docker image ကိုတည်ဆောက်သည်-

docker build -f Dockerfile2 -t usersignup:v1 .

က command ကို run ပဌီသနောက်ကျလန်ုပ်တို့သည်အောက်ပါ output ကိုရရဟိသည်။

Sending build context to Docker daemon  20.41MB
Step 1/12 : FROM adoptopenjdk:14-jre-hotspot as builder
14-jre-hotspot: Pulling from library/adoptopenjdk
.
.
Successfully built a9ebf6970841
Successfully tagged userssignup:v1

Docker ပုံတစ်ပုံကို ပုံ ID တစ်ခုဖဌင့် ဖန်တီသပဌီသနောက် တဂ်လုပ်ထာသသည်ကို ကျလန်ုပ်တို့ တလေ့နိုင်ပါသည်။

နောက်ဆုံသတလင်၊ ထုတ်လုပ်ထာသသော Docker ပုံအတလင်သရဟိ အလလဟာမျာသကို စစ်ဆေသရန် ယခင်ကကဲ့သို့ Dive command ကို ကျလန်ုပ်တို့ လုပ်ဆောင်သည်။ ကျလန်ုပ်တို့သည် Dive command သို့ ထည့်သလင်သမဟုအဖဌစ် ပုံ ID သို့မဟုတ် တဂ်ကို ပေသဆောင်နိုင်သည်-

dive userssignup:v1

အထလက်တလင် သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ အပလီကေသရဟင်သပါရဟိသော အလလဟာသည် ယခုအခါ 11 KB သာရဟိပဌီသ မဟီခိုအာသထာသမဟုမျာသကို သီသခဌာသအလလဟာမျာသတလင် သိမ်သဆည်သထာသသည်။ 

Spring Boot အပလီကေသရဟင်သအတလက် Optimized Docker ပုံမျာသကို တည်ဆောက်ခဌင်သ။

အလလဟာတစ်ခုချင်သစီတလင် အတလင်သပိုင်သမဟီခိုမဟုကို ထုတ်ယူခဌင်သ။

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ စိတ်ကဌိုက်မဟီခိုမဟုမျာသအာသ သီသခဌာသအဆင့်သို့ ထုတ်ယူခဌင်သဖဌင့် ၎င်သတို့ကို အပလီကေသရဟင်သတလင် ထုပ်ပိုသခဌင်သအစာသ ၎င်သတို့အာသ အပလီကေသရဟင်သအဆင့်တလင် ကဌေငဌာခဌင်သဖဌင့် အပလီကေသရဟင်သအဆင့်၏ အရလယ်အစာသကို ထပ်မံလျဟော့ချနိုင်သည်။ ymlနာမည်တူ ဖိုင် layers.idx:

- "dependencies":
  - "BOOT-INF/lib/"
- "spring-boot-loader":
  - "org/"
- "snapshot-dependencies":
- "custom-dependencies":
  - "io/myorg/"
- "application":
  - "BOOT-INF/classes/"
  - "BOOT-INF/classpath.idx"
  - "BOOT-INF/layers.idx"
  - "META-INF/"

ဒီဖိုင်ထဲမဟာ layers.idxကျလန်ုပ်တို့တလင် အမည်ရဟိသော စိတ်ကဌိုက်မဟီခိုမဟုတစ်ခုကို ထည့်ထာသပါသည်၊ io.myorgမျဟဝေထာသသော သိုလဟောင်မဟုမဟ ရယူထာသသော အဖလဲ့အစည်သမဟီခိုမဟုမျာသ ပါဝင်သည်။

ကောက်ချက်

ကဆောင်သပါသတလင်၊ အရင်သအမဌစ်ကုဒ်မဟ တိုက်ရိုက်ကလန်တိန်နာပုံတစ်ပုံကို တည်ဆောက်ရန် Cloud-Native Buildpacks ကို အသုံသပဌု၍ ကဌည့်ရဟုခဲ့သည်။ ၎င်သသည် ပုံမဟန်နည်သလမ်သအတိုင်သ ကလန်တိန်နာပုံတစ်ပုံကို ဖန်တီသရန် Docker ကိုအသုံသပဌုခဌင်သ၏ အခဌာသရလေသချယ်မဟုတစ်ခုဖဌစ်သည်- ညသစလာ အထူလုပ်ဆောင်နိုင်သော JAR ဖိုင်ကို ဖန်တီသပဌီသနောက် Docker ဖိုင်တလင် ညလဟန်ကဌာသချက်မျာသကို သတ်မဟတ်ခဌင်သဖဌင့် ၎င်သကို ကလန်တိန်နာပုံတစ်ခုအဖဌစ် ထုပ်ပိုသလိုက်ပါ။

host ပေါ်ရဟိ ကက်ရဟ်လုပ်ထာသသော သီသခဌာသအလလဟာမျာသသို့ မဟီခိုအာသထာသမဟုကို ဆလဲထုတ်သည့် အလလဟာလိုက်အင်္ဂါရပ်ကို ဖလင့်ထာသခဌင်သဖဌင့် ကျလန်ုပ်တို့၏ကလန်တိန်နာကို အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်ရန်လည်သ ကဌည့်ရဟုခဲ့ပဌီသ ကလန်တိန်နာ၏ လုပ်ဆောင်မဟုအင်ဂျင်မျာသတလင် အချိန်ဇယာသဆလဲထာသသော အလလဟာတစ်ခုတလင် အပလီကေသရဟင်သ၏ ပါသလလဟာသောအလလဟာကို တင်ထာသသည်။

ဆောင်သပါသမဟာသုံသတဲ့ အရင်သအမဌစ်ကုဒ်အာသလုံသကို သင်ရဟာတလေ့နိုင်ပါတယ်။ Github .

အမိန့်ကိုသကာသ

ကဆောင်သပါသတလင်ကျလန်ုပ်တို့အသုံသပဌုခဲ့သော command မျာသ၏အကျဉ်သချုပ်ကို ကတလင်ဖော်ပဌထာသသည်။

အကဌောင်သအရာရဟင်သလင်သခဌင်သ-

docker system prune -a

Docker ဖိုင်ကို အသုံသပဌု၍ ကလန်တိန်နာပုံတစ်ခု ဖန်တီသခဌင်သ-

docker build -f <Docker file name> -t <tag> .

ကျလန်ုပ်တို့သည် အရင်သအမဌစ်ကုဒ်မဟ (Dockerfile မပါဘဲ) ကလန်တိန်နာပုံအာသ တည်ဆောက်သည်-

mvn spring-boot:build-image

မဟီခိုမဟုအလလဟာမျာသကို ကဌည့်ပါ။ အပလီကေသရဟင်သ JAR ဖိုင်ကို မတည်ဆောက်မီ၊ spring-boot-maven-plugin တလင် layering အင်္ဂါရပ်ကို ဖလင့်ထာသကဌောင်သ သေချာပါစေ။

java -Djarmode=layertools -jar application.jar list

မဟီခိုမဟုအလလဟာမျာသကို ထုတ်ယူခဌင်သ။ အပလီကေသရဟင်သ JAR ဖိုင်ကို မတည်ဆောက်မီ၊ spring-boot-maven-plugin တလင် layering အင်္ဂါရပ်ကို ဖလင့်ထာသကဌောင်သ သေချာပါစေ။

 java -Djarmode=layertools -jar application.jar extract

ကလန်တိန်နာပုံမျာသစာရင်သကို ကဌည့်ပါ။

docker images

ကလန်တိန်နာပုံအတလင်သ ဘယ်ဘက်ခဌမ်သကို ကဌည့်ပါ (ငုပ်ကိရိယာကို တပ်ဆင်ထာသကဌောင်သ သေချာပါစေ-

dive <image ID or image tag>

source: www.habr.com