قبل بضعة أيام ، تم إصدار Spring Boot 2.3.0.M1 ، حيث يشير السطر الأول إلى دعم مشروع Cloud Native Buildpacks ، والذي يمثل محاولة لتبسيط حياة المطور ، مما يتيح أتمتة تجميع الصور من أكواد المصدر قدر الإمكان. نظرًا لأن خدماتنا المصغرة يجب أن تعيش في حاويات في مشروعي الحالي ، فقد قررت تجربتها ومعرفة ما هي المزايا. استمرار قصير تحت القطع.
يسمح Cloud Native Buildpacks (CNB) للمطور بعدم كتابة أو دعم Dockerfile الخاص به. من خلال إطلاق الفريق الوحيد الذي يبني مشروع CNB ، فإنه سيتم تحديد التبعيات التي سيتم تجميعها في صورة. يبدو مثل هذا:

بالإضافة إلى ذلك ، بسبب العديد من التقنيات: دعم OCI ، البنية المعيارية ، التخزين المؤقت لطبقات التبعية - يمكن استخدام نظام CNB على نطاق واسع ، ووفقًا للمطورين ، فهو سريع جدًا.
دعونا التحقق من ما هو في الواقع. تحميل الموقع start.spring.io مشروع فارغ. أضف القليل من التبعيات إليه لمعرفة ما إذا كانت الحاوية الخاصة بنا تعمل على الإطلاق.
هذا هو المكان الذي ينتهي فيه الإعداد لنا - طلبنا جاهز لوضعه في حاوية. للقيام بذلك ، قم بتشغيل في مستوى
"./gradlew bootBuildImage" أو من أجل
maven "./mvnw spring-boot: build-image" ويبدأ التجميع. بعد التجميع ، نحصل على سجل مناسب مع وصف للعملية بأكملها.
في البداية ، يحصل البرنامج المساعد على القطع الأساسية الضرورية:> Task :bootBuildImage Building image 'docker.io/library/cnb:0.0.1-SNAPSHOT' > Pulling builder image 'docker.io/cloudfoundry/cnb:0.0.43-bionic' .................................................. > Pulled builder image 'cloudfoundry/cnb@sha256:c983fb9602a7fb95b07d35ef432c04ad61ae8458263e7fb4ce62ca10de367c3b' > Pulling run image 'docker.io/cloudfoundry/run:base-cnb' .................................................. > Pulled run image 'cloudfoundry/run@sha256:ba9998ae4bb32ab43a7966c537aa1be153092ab0c7536eeef63bcd6336cbd0db' > Executing lifecycle version v0.5.0 > Using build cache volume 'pack-cache-7cfae5296b92.build'
يتم إطلاق أجهزة الكشف التي تفحص المشروع وتحديد التبعيات التي يجب جمعها بالإضافة إلى ذلك: > Running detector [detector] 6 of 13 buildpacks participating [detector] org.cloudfoundry.openjdk v1.0.80 [detector] org.cloudfoundry.jvmapplication v1.0.113 [detector] org.cloudfoundry.tomcat v1.1.74 [detector] org.cloudfoundry.springboot v1.0.157 [detector] org.cloudfoundry.distzip v1.0.144 [detector] org.cloudfoundry.springautoreconfiguration v1.0.159
يتم تنزيل التبعيات ويبدأ التجميع: > Running builder [builder] [builder] Cloud Foundry OpenJDK Buildpack v1.0.80 [builder] OpenJDK JRE 11.0.5: Contributing to layer [builder] Downloading from https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.5%2B10/OpenJDK11U-jre_x64_linux_hotspot_11.0.5_10.tar.gz [builder] Verifying checksum [builder] Expanding to /layers/org.cloudfoundry.openjdk/openjdk-jre [builder] Writing JAVA_HOME to shared ... [builder] Cloud Foundry Spring Boot Buildpack v1.0.157 [builder] Spring Boot 2.3.0.M1: Contributing to layer [builder] Writing CLASSPATH to shared [builder] Process types: [builder] spring-boot: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication [builder] task: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication [builder] web: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication
الصورة سوف: > Running exporter [exporter] Adding layer 'app' [exporter] Adding layer 'config' [exporter] Adding layer 'launcher' [exporter] Adding layer 'org.cloudfoundry.openjdk:openjdk-jre' [exporter] Adding layer 'org.cloudfoundry.jvmapplication:executable-jar' [exporter] Adding layer 'org.cloudfoundry.springboot:spring-boot' [exporter] Adding layer 'org.cloudfoundry.springautoreconfiguration:auto-reconfiguration' [exporter] *** Images (2757ab54378d): [exporter] docker.io/library/cnb:0.0.1-SNAPSHOT
تبعيات المخزنة مؤقتاً: > Running cacher [cacher] Caching layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b' [cacher] Caching layer 'org.cloudfoundry.jvmapplication:executable-jar' [cacher] Caching layer 'org.cloudfoundry.springboot:spring-boot' [cacher] Caching layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150'
تم بناء الصورة بنجاح "docker.io/library/cnbmail.0.1-SNAPSHOT"
بناء ناجحة في 25sتكون الصورة مرئية بالفعل في عامل التحميل ويمكن عرضها باستخدام أمر صور docker وتشغيل تشغيل عامل تشغيل docker run -d -8080: 8080 imageid
إضافة تبعيات جديدة لتطبيقنا والبناء مرة أخرى.
يمر النظام عبر الطبقات المخزنة مؤقتًا: > Running restorer [restorer] Restoring cached layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b' [restorer] Restoring cached layer 'org.cloudfoundry.jvmapplication:executable-jar' [restorer] Restoring cached layer 'org.cloudfoundry.springboot:spring-boot' [restorer] Restoring cached layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150' > Running analyzer [analyzer] Using cached layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b' [analyzer] Writing metadata for uncached layer 'org.cloudfoundry.openjdk:openjdk-jre' [analyzer] Using cached launch layer 'org.cloudfoundry.jvmapplication:executable-jar' [analyzer] Rewriting metadata for layer 'org.cloudfoundry.jvmapplication:executable-jar' [analyzer] Using cached launch layer 'org.cloudfoundry.springboot:spring-boot' [analyzer] Rewriting metadata for layer 'org.cloudfoundry.springboot:spring-boot' [analyzer] Using cached layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150' [analyzer] Writing metadata for uncached layer 'org.cloudfoundry.springautoreconfiguration:auto-reconfiguration'
يبدأ تجميع المشروع بشكل مشابه للخطوة الأخيرة:
> Running builder [builder] [builder] Cloud Foundry OpenJDK Buildpack v1.0.80 [builder] OpenJDK JRE 11.0.5: Reusing cached layer [builder] [builder] Cloud Foundry JVM Application Buildpack v1.0.113 [builder] Executable JAR: Reusing cached layer [builder] Process types: [builder] executable-jar: java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher [builder] task: java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher [builder] web: java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher [builder] [builder] Cloud Foundry Spring Boot Buildpack v1.0.157 [builder] Spring Boot 2.3.0.M1: Contributing to layer [builder] Writing CLASSPATH to shared [builder] Process types: [builder] spring-boot: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication [builder] task: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication [builder] web: java -cp $CLASSPATH $JAVA_OPTS dev.ivanov.cnb.CnbApplication [builder] [builder] Cloud Foundry Spring Auto-reconfiguration Buildpack v1.0.159 [builder] Spring Auto-reconfiguration 2.11.0: Reusing cached layer > Running exporter [exporter] Adding layer 'app' [exporter] Adding layer 'config' [exporter] Reusing layer 'launcher' [exporter] Reusing layer 'org.cloudfoundry.openjdk:openjdk-jre' [exporter] Reusing layer 'org.cloudfoundry.jvmapplication:executable-jar' [exporter] Adding layer 'org.cloudfoundry.springboot:spring-boot' [exporter] Reusing layer 'org.cloudfoundry.springautoreconfiguration:auto-reconfiguration' [exporter] *** Images (7a83fadad1ce): [exporter] docker.io/library/cnb:0.0.1-SNAPSHOT > Running cacher [cacher] Reusing layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b' [cacher] Reusing layer 'org.cloudfoundry.jvmapplication:executable-jar' [cacher] Caching layer 'org.cloudfoundry.springboot:spring-boot' [cacher] Reusing layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150'
تم بناء الصورة بنجاح "docker.io/library/cnbmail.0.1-SNAPSHOT"
بناء ناجحة في 20sتم تجميع المجموعة بشكل أسرع من سابقتها ، على الرغم من ظهور تبعيات إضافية في المشروع - كل ذلك بفضل إعادة استخدام طبقات الحاويات.
لدراسة الصورة الناتجة بمزيد من التفصيل ، تحتاج إلى تنزيل
حزمة الأدوات المساعدة
من هنا واستخدام الأمر
inspect-image للنظر داخل أي صورة:
"name": "openjdk-jre", "version": "11.0.5", "metadata": { "licenses": [ { "type": "GPL-2.0 WITH Classpath-exception-2.0", "uri": "https://openjdk.java.net/legal/gplv2+ce.html" } ], "name": "OpenJDK JRE", "sha256": "2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b", "stacks": [ "io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.cflinuxfs3" ], "uri": "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.5%!B(MISSING)10/OpenJDK11U-jre_x64_linux_hotspot_11.0.5_10.tar.gz" }, "buildpack": { "id": "org.cloudfoundry.openjdk", "version": "v1.0.80" } }, { "name": "executable-jar", "version": "", "metadata": { "classpath": [ "/workspace" ], "main-class": "org.springframework.boot.loader.JarLauncher" }, "buildpack": { "id": "org.cloudfoundry.jvmapplication", "version": "v1.0.113" }
تشير بيانات البيانات الأولية إلى ما هو موجود في الصورة ، وما هو موجود في كل طبقة ، وكيف تم إنشاؤها. هذا إضافة لا لبس فيها للأمان ، نظرًا لأن بنية كل صورة معروفة وتستبعد الزيارات في مكتبات "اليسار".
وبالتالي ، توفر Cloud Native Buildpacks وظائف مثيرة جدًا لمطوري الخدمات الصغيرة ، خاصةً في Spring Boot ، نظرًا لأن Pivotal قيد التطوير ، مما يعني أن كل شيء سيكون على ما يرام مع الدعم. ولكن تجدر الإشارة أيضًا إلى أن CNB متوافق مع الأطر واللغات الأخرى.