کانټینرونه د دې ټولو سافټویر او عملیاتي سیسټم انحصارونو سره د غوښتنلیک بسته کولو غوره وسیله ګرځیدلې او بیا یې مختلف چاپیریال ته وړاندې کوي.
دا مقاله د پسرلي بوټ غوښتنلیک کانټینر کولو بیلابیل لارې پوښي:
- د ډاکر فایل په کارولو سره د ډاکر عکس رامینځته کول ،
- د Cloud-Native Buildpack په کارولو سره د سرچینې څخه د OCI انځور جوړول،
- او د څو اړخیزو وسیلو په کارولو سره د JAR برخې په بیلابیلو پرتونو جلا کولو سره د چلولو وخت عکس اصلاح کول.
د کوډ مثال
دا مقاله د کاري کوډ مثال سره ده
د کانټینر اصطلاح
موږ به د کانټینر اصطلاحاتو سره پیل وکړو چې په مقاله کې کارول شوي:
- د کانټینر انځور: د یوې ځانګړې بڼې فایل. موږ به خپل غوښتنلیک د جوړونې وسیلې په چلولو سره د کانټینر عکس ته واړوو.
- کانټینر: د کانټینر عکس د اجرا وړ مثال.
- د کانټینر انجن: د ډیمون پروسه د کانټینر چلولو مسؤلیت لري.
- د کانټینر کوربه: کوربه کمپیوټر چې د کانټینر انجن چلوي.
- د کانټینر ثبت: عمومي ځای چې د کانټینر عکس خپرولو او توزیع کولو لپاره کارول کیږي.
- د OCI معیار:
خلاص کانټینر نوښت (OCI) د لینوکس فاونډیشن دننه جوړ شوی یو لږ وزن لرونکی ، خلاصې حکومتدارۍ جوړښت دی. د OCI عکس مشخصات د کانټینر عکس او رن ټایم فارمیټونو لپاره د صنعت معیارونه ټاکي ترڅو ډاډ ترلاسه کړي چې ټول کانټینر انجنونه کولی شي د کانټینر عکسونه پرمخ بوځي چې د هرې جوړونې وسیلې لخوا رامینځته شوي.
د یو غوښتنلیک کانټینر کولو لپاره، موږ خپل غوښتنلیک په یو کانټینر عکس کې وتړو او هغه انځور شریک شوي ثبت ته خپور کړو. د کانټینر چلولو وخت دا عکس له راجسټري څخه ترلاسه کوي ، خلاصوي یې ، او غوښتنلیک دننه یې چلوي.
د پسرلي بوټ 2.3 نسخه د OCI عکسونو رامینځته کولو لپاره پلگ ان چمتو کوي.
د کانټینر عکس جوړول په دودیز ډول
د پسرلي بوټ غوښتنلیکونو لپاره د ډاکر عکسونو رامینځته کول د ډاکر فایل ته د څو لارښوونو اضافه کولو سره خورا اسانه دي.
موږ لومړی د اجرا وړ JAR فایل رامینځته کوو او د ډاکر فایل لارښوونو برخې په توګه ، د لازمي تنظیماتو پلي کولو وروسته د اساس JRE عکس په سر کې د اجرا وړ JAR فایل کاپي کوو.
راځئ چې زموږ د پسرلي غوښتنلیک جوړ کړو web
, lombok
и actuator
. موږ د API چمتو کولو لپاره د آرام کنټرولر هم اضافه کوو GET
طریقه
د ډاکر فایل رامینځته کول
بیا موږ دا غوښتنلیک په اضافه کولو سره کانټینر کوو Dockerfile
:
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/application.jar"]
زموږ د ډاکر فایل د اساس عکس لري adoptopenjdk
، چې په سر کې موږ زموږ د JAR فایل کاپي کوو او بیا بندر خلاصوو ، 8080
کوم چې غوښتنو ته غوږ نیسي.
د غوښتنلیک جوړول
لومړی تاسو اړتیا لرئ د Maven یا Gradle په کارولو سره یو غوښتنلیک جوړ کړئ. دلته موږ Maven کاروو:
mvn clean package
دا د غوښتنلیک لپاره د اجرا وړ JAR فایل رامینځته کوي. موږ اړتیا لرو چې دا اجرا وړ JAR د ډاکر عکس ته واړوو ترڅو د ډاکر انجن چلولو لپاره.
د کانټینر عکس جوړول
بیا موږ دا د اجرا وړ JAR فایل د کمانډ په چلولو سره د ډاکر عکس کې واچوو docker build
د پروژې روټ لارښود څخه چې مخکې جوړ شوی ډاکر فایل لري:
docker build -t usersignup:v1 .
موږ کولی شو خپل عکس په لیست کې د کمانډ په کارولو سره وګورو:
docker images
د پورتنۍ کمانډ په محصول کې زموږ عکس شامل دی usersignup
د بنسټیز انځور سره، adoptopenjdk
زموږ د ډاکر فایل کې مشخص شوی.
REPOSITORY TAG SIZE
usersignup v1 249MB
adoptopenjdk 11-jre-hotspot 229MB
د کانټینر عکس دننه پرتونه وګورئ
راځئ چې د عکس دننه د پرتونو سټیک وګورو. موږ به وکاروو
dive usersignup:v1
دلته د Dive کمانډ څخه د محصول برخه ده:
لکه څنګه چې موږ لیدلی شو، د غوښتنلیک پرت د عکس اندازې یوه مهمه برخه جوړوي. موږ غواړو زموږ د اصلاح کولو برخې په توګه په لاندې برخو کې د دې پرت اندازه کمه کړو.
د Buildpack په کارولو سره د کانټینر عکس رامینځته کول
د بادل جوړولو کڅوړو ګټه
د عکسونو رامینځته کولو لپاره د Buildpack کارولو یوه له اصلي ګټو څخه دا ده د عکس ترتیب کولو بدلونونه په مرکزي ډول اداره کیدی شي (بلډر) او د بلډر په کارولو سره ټولو غوښتنلیکونو ته تبلیغ کیدی شي.
د جوړونې کڅوړې په کلکه پلیټ فارم سره یوځای شوي. Cloud-Native Buildpacks د OCI عکس فارمیټ ملاتړ کولو سره په پلیټ فارمونو کې معیاري کول چمتو کوي ، کوم چې ډاډ ورکوي چې عکس د ډاکر انجن لخوا پرمخ وړل کیدی شي.
د پسرلي بوټ پلگ ان کارول
د پسرلي بوټ پلگ ان د Buildpack په کارولو سره د سرچینې څخه د OCI عکسونه جوړوي. انځورونه په کارولو سره جوړ شوي دي bootBuildImage
دندې (Gradle) یا spring-boot:build-image
هدفونه (Maven) او د ځایی ډاکر نصب کول.
موږ کولی شو د نوم په ټاکلو سره د ډاکر راجسټری ته د فشار لپاره اړین عکس نوم تنظیم کړو 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>
راځئ چې د دې کولو لپاره میون وکاروو build-image
د غوښتنلیک رامینځته کولو او د کانټینر عکس رامینځته کولو اهداف. موږ پدې وخت کې هیڅ ډاکر فایلونه نه کاروو.
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 عکس جوړولو لپاره کارول کیږي. لکه څنګه چې دمخه ، موږ کولی شو د کمانډ په چلولو سره د ډاکر عکس په توګه لیست شوي عکس وګورو:
docker images
پایله:
REPOSITORY SIZE
paketobuildpacks/run 84.3MB
gcr.io/paketo-buildpacks/builder 652MB
pratikdas/usersignup 257MB
د جیب په کارولو سره د کانټینر عکس رامینځته کول
جیب د ګوګل څخه د عکس جوړولو پلگ ان دی چې د سرچینې کوډ څخه د کانټینر عکس رامینځته کولو لپاره بدیل میتود چمتو کوي.
جوړول jib-maven-plugin
په pom.xml کې:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
بیا ، موږ د اپلیکیشن جوړولو او د کانټینر عکس رامینځته کولو لپاره د ماون کمانډ په کارولو سره جیب پلگ ان چلوو. لکه څنګه چې مخکې، موږ دلته د ډاکر فایلونه نه کاروو:
mvn compile jib:build -Dimage=<docker registry name>/usersignup:v1
د پورته Maven کمانډ اجرا کولو وروسته، موږ لاندې محصول ترلاسه کوو:
[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
محصول ښیې چې د کانټینر عکس رامینځته شوی او په راجسټری کې ځای په ځای شوی.
د مطلوب انځورونو جوړولو لپاره هڅونې او تخنیکونه
موږ د اصلاح کولو دوه اصلي لاملونه لرو:
- محصولات: د کانټینر آرکیسټریشن سیسټم کې ، د کانټینر عکس د عکس راجسټرې څخه کوربه ته د کانټینر انجن پرمخ وړل کیږي. دې پروسې ته پلان جوړونه ویل کیږي. د راجسټری څخه د لوی عکسونو ایستل د کانټینر آرکیسټریشن سیسټمونو کې د اوږد مهالویش وختونو او د CI پایپ لاینونو کې د اوږد جوړیدو وختونو پایله لري.
- امنیت: لوی انځورونه هم د زیان منونکو لپاره لویه ساحه لري.
د ډاکر عکس د پرتونو سټیک څخه جوړ دی ، چې هر یو یې زموږ په ډاکر فایل کې لارښوونې څرګندوي. هره طبقه په لاندې پرت کې د بدلونونو ډیلټا استازیتوب کوي. کله چې موږ د راجسټری څخه د ډاکر عکس راوباسئ ، دا په پرتونو کې ایستل کیږي او په کوربه کې ساتل کیږي.
د پسرلي بوټ کارول
د اصلاح کولو فورمول د پسرلي چوکاټ له انحصار څخه په جلا کچه د غوښتنلیک جلا کولو شاوخوا مرکزونه لري.
د انحصار پرت، چې د JAR د فايل ډیری برخه جوړوي، یوازې یو ځل ډاونلوډ کیږي او په کوربه سیسټم کې ساتل کیږي.
د غوښتنلیک تازه کولو او کانټینر مهالویش پرمهال د غوښتنلیک یوازې یو پتلی پرت ایستل کیږي. لکه څنګه چې په دې انځور کې ښودل شوي:
په لاندې برخو کې، موږ به وګورو چې څنګه د پسرلي بوټ غوښتنلیک لپاره دا غوره شوي انځورونه جوړ کړو.
د بلډپیک په کارولو سره د پسرلي بوټ غوښتنلیک لپاره د غوره شوي کانټینر عکس رامینځته کول
د پسرلي بوټ 2.3 په جلا پرتونو کې د یو موټی JAR فایل برخې په استخراج سره د پرتونو ملاتړ کوي. د پرت کولو خصوصیت د ډیفالټ لخوا غیر فعال شوی او باید د پسرلي بوټ ماون پلگ ان په کارولو سره په واضح ډول فعال شي:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
</plugin>
موږ به دا ترتیب د خپل کانټینر عکس جوړولو لپاره وکاروو لومړی د بلډپیک سره او بیا په لاندې برخو کې د ډاکر سره.
راځئ چې پیل کړو build-image
د کانټینر عکس جوړولو لپاره د ماون هدف:
mvn spring-boot:build-image
که موږ په پایله شوي عکس کې د پرتونو لیدلو لپاره ډوب چلوو، موږ لیدلی شو چې د غوښتنلیک پرت (په سور کې ښودل شوی) د کیلوبایټ رینج کې خورا کوچنی دی د هغه څه په پرتله چې موږ د موټ JAR فارمیټ څخه کار اخلو:
د ډاکر په کارولو سره د پسرلي بوټ غوښتنلیک لپاره د مطلوب کانټینر عکس رامینځته کول
د Maven یا Gradle پلگ ان کارولو پرځای، موږ کولی شو د Docker فایل سره یو پرت شوی Docker JAR عکس هم جوړ کړو.
کله چې موږ ډاکر کاروو ، موږ اړتیا لرو د پرتونو ایستلو لپاره دوه اضافي مرحلې ترسره کړو او په وروستي عکس کې یې کاپي کړو.
د لیرینګ فعالولو سره د ماون کارولو وروسته د پایله شوي 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
د دې کمانډ چلول محصول تولیدوي چې د موجود کمانډ اختیارونه لري:
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
محصول حکمونه ښیې list
, extract
и help
с help
ډیفالټ وي. راځئ چې کمانډ سره پرمخ بوځو 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 لوډر ټولګي
snapshot-dependencies
هر ډول انحصار چې نسخه یې SNAPSHOT لري
application
د غوښتنلیک ټولګي او سرچینې
پرتونه په کې تعریف شوي دي layers.idx
فایل په ترتیب کې دوی باید د ډاکر عکس کې اضافه شي. دا پرتونه د لومړي ترلاسه کولو وروسته په کوربه کې ساتل کیږي ځکه چې دوی بدلون نه کوي. یوازې تازه شوي غوښتنلیک پرت کوربه ته ډاونلوډ شوی ، کوم چې د کم شوي اندازې له امله ګړندی دی .
د انحصار سره د عکس جوړول په جلا پرتونو کې ایستل شوي
موږ به وروستی عکس په دوه مرحلو کې د میتود په کارولو سره جوړ کړو
راځئ چې د څو مرحلې جوړونې لپاره زموږ ډاکر فایل ترمیم کړو:
# 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
.
موږ د کمانډ په کارولو سره د ډاکر عکس جوړوو:
docker build -f Dockerfile2 -t usersignup:v1 .
د دې کمانډ چلولو وروسته موږ لاندې محصول ترلاسه کوو:
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
موږ لیدلی شو چې د ډاکر عکس د عکس ID سره رامینځته شوی او بیا ټګ شوی.
په نهایت کې ، موږ د ډیو کمانډ چلوو لکه څنګه چې د تولید شوي ډاکر عکس دننه پرتونو معاینه کوو. موږ کولی شو د Dive کمانډ ته د ننوتلو په توګه د عکس ID یا ټاګ چمتو کړو:
dive userssignup:v1
لکه څنګه چې تاسو په محصول کې لیدلی شئ، هغه پرت چې غوښتنلیک لري اوس یوازې 11 KB دی، او انحصار په جلا پرتونو کې ساتل کیږي.
په انفرادي پرتونو کې د داخلي انحصار استخراج
موږ کولی شو د غوښتنلیک درجې اندازه نوره هم راټیټ کړو چې زموږ د ګمرکي انحصارونو څخه په جلا ټایر کې استخراج کولو سره د غوښتنلیک سره بسته کولو پرځای د دوی اعلانولو سره. 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 کارولو ته ګورو. دا د معمول ډول د کانټینر عکس رامینځته کولو لپاره د ډاکر کارولو بدیل دی: لومړی د موټ اجرا وړ JAR فایل رامینځته کول او بیا یې د ډاکر فایل کې لارښوونې مشخص کولو سره د کانټینر عکس کې بسته کول.
موږ د لیرینګ خصوصیت په فعالولو سره زموږ د کانټینر اصلاح کولو ته هم ګورو چې انحصارونه په جلا پرتونو کې راوباسي چې په کوربه کې ساتل شوي او د غوښتنلیک یو پتلی پرت د کانټینر اجرا کولو انجنونو کې د مهالویش په وخت کې بار شوی.
تاسو کولی شئ په مقاله کې کارول شوي ټول سرچینې کوډ ومومئ
د قوماندې حواله
دلته د هغه کمانډونو ګړندۍ لړۍ ده چې موږ پدې مقاله کې کارولې.
د شرایطو پاکول:
docker system prune -a
د ډاکر فایل په کارولو سره د کانټینر عکس رامینځته کول:
docker build -f <Docker file name> -t <tag> .
موږ د کانټینر عکس د سرچینې کوډ څخه جوړوو (پرته د ډاکر فایل):
mvn spring-boot:build-image
د انحصار پرتونه وګورئ. د غوښتنلیک JAR فایل جوړولو دمخه، ډاډ ترلاسه کړئ چې د پرت کولو ځانګړتیا په پسرلي-بوټ-ماین-پلگ ان کې فعاله شوې ده:
java -Djarmode=layertools -jar application.jar list
د انحصار پرتونو استخراج. د غوښتنلیک JAR فایل جوړولو دمخه، ډاډ ترلاسه کړئ چې د پرت کولو ځانګړتیا په پسرلي-بوټ-ماین-پلگ ان کې فعاله شوې ده:
java -Djarmode=layertools -jar application.jar extract
د کانټینر عکسونو لیست وګورئ
docker images
د کانټینر عکس دننه کیڼ اړخ ته وګورئ (ډاډه کړئ چې د ډوب وسیله نصب شوې ده):
dive <image ID or image tag>
سرچینه: www.habr.com