Πώς να αποκεφαλιστείτε μια εφαρμογή εκκίνησης άνοιξη με το Jib της Google

Εικόνα 1: Εικόνες docker χωρίς τριβές με jib!

Γειά σου! Ενώ εργάζονταν πρόσφατα σε μια πλατφόρμα με βάση την άνοιξη, σκέφτηκα ποιος τρόπος για να προχωρήσω στην αποδέσμευση μιας μικροσυντήρησης. Γι 'αυτό ήρθα σε Jib, μια αρκετά νέα προσέγγιση στο θέμα, που αναπτύχθηκε από την Google.

Αυτή η ανάρτηση αφορά την αξιοποίηση του Jib, και πιο συγκεκριμένα του jib-maven-plugin, για την κατασκευή μιας εφαρμογής για την εκκίνηση με άνοιγμα σε εμπορευματοκιβώτια.

Το δοκιμαστικό έργο που χρησιμοποιήθηκε σε αυτή τη δημοσίευση μπορεί να βρεθεί εδώ:

Τι είναι το Jib

Τι Jib φέρνει στο τραπέζι είναι ότι σας επιτρέπει να δημιουργήσετε ένα κοντέινερ προσθέτοντας απλά μια προσθήκη στο εργαλείο κατασκευής της επιλογής σας (Maven ή Gradle). Δεν υπάρχουν επιπλέον αρχεία, μερικές μόνο γραμμές διαμόρφωσης και χειρίζεται όλα τα βήματα της συσκευασίας της αίτησής σας σε μια εικόνα δοχείου.

Με τα λόγια της ομάδας του cloud της Google:

Το Jib είναι ένα λογισμικό εμπορευματοκιβωτίου Java ανοιχτού κώδικα από την Google που επιτρέπει στους προγραμματιστές Java να δημιουργούν κοντέινερ χρησιμοποιώντας τα εργαλεία Java που γνωρίζουν. Δεν απαιτεί να γράψετε ένα Dockerfile ή να έχετε εγκαταστήσει το docker και είναι άμεσα ενσωματωμένο στο Maven και το Gradle.

Στην "παραδοσιακή" ροή εικόνας Java to Docker, χρειαζόμαστε ένα Dockerfile και το daemon docker εγκατεστημένο, όπως φαίνεται παρακάτω:

Εικόνα 2: Τα παραδοσιακά βήματα για τη δημιουργία μιας εικόνας docker από μια εφαρμογή Java.

Όπως υποδεικνύει το διάγραμμα, στη ροή δημιουργίας Jib χρειάζεστε απλώς το plugin το αρχείο δημιουργίας του έργου:

Εικόνα 3: Ο τρόπος Jib για τη δημιουργία εικόνας docker από μια εφαρμογή Java.

Ρύθμιση

Δεν είναι στο πεδίο αυτής της θέσης να δημιουργηθεί ένα περιβάλλον ανάπτυξης Java, αλλά ας δώσουμε ένα πλάνο!

  1. Βεβαιωθείτε ότι έχετε εγκαταστήσει το Java 8+.
  2. Θα χρησιμοποιήσουμε το maven, οπότε αν δεν υπάρχει εγκατάσταση του maven 3.5+.
  3. Βεβαιωθείτε ότι έχετε εγκαταστήσει το docker και αν χρησιμοποιείτε το Linux, ο χρήστης έχει πρόσβαση στο docker.
  4. Έχετε εγκαταστήσει το αγαπημένο σας IDE (έκλειψη ή ιδέα).

Δημιουργήστε μια βασική εφαρμογή εκκίνησης με άνοιξη

Αυτό μπορεί να γίνει είτε μέσω initializr άνοιξη, είτε μέσω του αγαπημένου σας IDE. Εάν χρησιμοποιήσατε τον αρχικοποιητή της άνοιξης, θα χρειαστεί να εισάγετε το νεοδημιουργημένο έργο maven στο IDE (έκλειψη / ιδέα).

Προσθέστε jib-maven-plugin στο pom.xml σας

Για μια πολύ βασική τοπικά αποθηκευμένη εικόνα της εφαρμογής σας, διαμορφώστε το plugin jib-maven στο pom.xml σας ως εξής:

Συγκεντρώστε την εφαρμογή και δημιουργήστε την εικόνα

Τώρα μπορούμε να χτίσουμε την εφαρμογή και να ελέγξουμε αν η εικόνα δημιουργήθηκε στο τοπικό μας χώρο αποθήκευσης docker.

Μεταβείτε στον ριζικό φάκελο του έργου μέσω τερματικού και εκτελέστε:

mvn μεταγλωττιστής jib: dockerBuild

Τα αρχεία καταγραφής Maven πρέπει να περιέχουν γραμμές όπως οι εξής:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (προεπιλογή-cli) @ άνοιξη-εκκίνηση-jib - -
[INFO]
[INFO] Εμπορευματοποίηση εφαρμογής στο Docker daemon ως springbootjib ...
[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Η βασική εικόνα 'gcr.io/distroless/java' δεν χρησιμοποιεί συγκεκριμένη εικόνα digest - η κατασκευή δεν μπορεί να αναπαραχθεί
[INFO] Λήψη εικόνας βάσης gcr.io/distroless/java ...
[INFO] Στρώμα εξαρτήσεων οικοδόμησης ...
[INFO] Στρώμα πόρων πόρων ...
[INFO] Στρώμα κλάδων κτιρίων ...
[INFO] Ολοκλήρωση ...
[INFO]
[INFO] Σημείο εισαγωγής κοντέινερ που έχει οριστεί σε [java, -cp, / app / resources: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Φόρτωση στο δαίμονα Docker ...
[INFO]
[INFO] Ενσωματωμένη εικόνα στον δαίμονα Docker ως springbootjib

Εφόσον δεν υπάρχουν σφάλματα και βλέπουμε ότι το maven "Built image to daemon Docker ως springbootjib" είμαστε όλοι έτοιμοι.

Εκτελέστε την εικόνα του λιμένα

Σε αυτό το σημείο θα πρέπει να έχουμε τη νέα εικόνα docker στην τοπική αποθήκη μας. Μπορούμε να ελέγξουμε με την εκτέλεση της εικόνας docker ls και θα πρέπει να δούμε μια εικόνα παρόμοια με αυτή:

springbootjib τελευταία eb4bea693650 3 ώρες πριν 135MB

Παρατηρήστε το πολύ μικρό μέγεθος εικόνας (135mb), το οποίο οφείλεται στην εικόνα gcr.io/distroless/java που χρησιμοποιεί το Jib από προεπιλογή (θα δούμε πώς μπορούμε να το αλλάξουμε αργότερα).

Τώρα λοιπόν μπορούμε να εκτελέσουμε την εικόνα ως συνήθως πληκτρολογώντας το docker run -in το springbootjib και να επιβεβαιώσουμε ότι η εφαρμογή λειτουργεί όπως αναμένεται.

Ρύθμιση του plugin Jib για να ρυθμίσετε την εικόνα του Docker

Μπορούμε να σκάψουμε βαθύτερα και να ρυθμίσουμε περαιτέρω το plugin Jib, ώστε να ταιριάζει σε αρκετά κοινά σενάρια, όπως η σύνδεση σε αποθήκη docker, η έκθεση σε θύρες, η επιλογή μιας συγκεκριμένης εικόνας βάσης κλπ.

Για παράδειγμα, στην ακόλουθη διαμόρφωση η εικόνα:

  • Είναι χτισμένο από βάση openjdk: αλπικό (τραβηγμένο από το Docker Hub)
  • Έχει ωθηθεί σε localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, και localhost: 5000 / springbootjib: τελευταίες
  • Λειτουργεί με κλήση java -Xms256m -Xdebug -cp app / libs / *: app / resources: app / classes com.jibdemo.SpringBootJibApplication μερικά args
  • Εκθέτει τη θύρα 8001 για tcp (προεπιλογή) και τις θύρες 8002 και 8003 για udp
  • Έχει μια ετικέτα (όνομα: springbootjib)
  • Είναι χτισμένο ως μορφή OCI

Τώρα μπορείτε να δημιουργήσετε ξανά την εικόνα και να δείτε τη διαφορά στα αρχεία καταγραφής maven:

[INFO] --- jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ άνοιξη-εκκίνηση-jib ---
[INFO]
[INFO] Εμπορευματοποίηση εφαρμογής στον Docker daemon ως localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib ...
[INFO] Λήψη εικόνας βάσης openjdk: αλπικό ...
[INFO] Στρώμα εξαρτήσεων οικοδόμησης ...
[INFO] Στρώμα πόρων πόρων ...
[INFO] Στρώμα κλάδων κτιρίων ...
[INFO] Η εικόνα βάσης απαιτεί auth. Δοκιμάζοντας πάλι για openjdk: αλπικό ...
[INFO] Ανάκτηση διαπιστευτηρίων μητρώου για το registry.hub.docker.com ...
[INFO] Ολοκλήρωση ...
[INFO]
[INFO] Σημείο εισαγωγής κοντέινερ που έχει οριστεί σε [java, -Xms256m, -Xdebug, -cp, / app / resources: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Φόρτωση στο δαίμονα Docker ...
[INFO]
[INFO] Ενσωματωμένη εικόνα στον δαίμονα Docker ως τοπικόhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib

Σημειώστε στο τμήμα καταγραφής πάνω από το ότι το plugin τραβούσε την εικόνα openjdk: alpine από το Docker Hub, έχτισε την εικόνα σε τρεις εκδόσεις με διαφορετική ετικέτα και τις αποθηκεύτηκε στο τοπικό μας αποθετήριο.

Γιατί πήρα έναν πυροβολισμό με τον Jib

  • Δεν χρειάζεται να διατηρήσετε ένα Dockerfile, να εκτελέσετε έναν δαίμονα Docker ή ακόμα και να ανησυχείτε για τη δημιουργία ενός πλούσιου JAR με όλες τις εξαρτήσεις του.
  • Επωφελείται από τη στρωματοποίηση εικόνας και την προσωρινή αποθήκευση μητρώου για την επίτευξη γρήγορων, αυξανόμενων δομών.
  • Μπορεί να ρυθμιστεί ώστε να δημιουργεί αναπαραγωγίσιμες εικόνες δημιουργίας εφόσον οι είσοδοι σας παραμένουν οι ίδιες.

συμπέρασμα

Έχοντας χρησιμοποιήσει άλλα πρόσθετα maven όπως αυτά από το spotify και το fabric8 για να δημιουργήσετε εικόνες docker για εφαρμογές java, χαιρετίζω το Google για το θέμα. Χρειάζεται λιγότερα αρχεία από το plugin του fabric8 και (κατά την ταπεινή μου άποψη) αισθάνεται ευκολότερο να ρυθμιστεί από το plugin του spotify. Σίγουρα σας προτείνω να δοκιμάσετε!

Αποποίηση: Αυτό δεν είναι άρθρο σύγκρισης, μόνο η άποψή μου για το θέμα που υποστηρίζεται από την προσωπική εμπειρία.

Μπορείτε πάντα να διαβάσετε περισσότερα για το github repo του Jib, το οποίο έχει λεπτομερείς πληροφορίες σχετικά με όλες τις παραμέτρους διαμόρφωσης. Σας ευχαριστώ που διαβάσατε αυτό το γεγονός! Ελπίζω να το διασκέδασες! Μπορείτε να αφήσετε τα σχόλιά σας εδώ.

Σχετικά με μένα

Γεια σου, ευχαριστώ που σταμάτατε. Είμαι ανεξάρτητος μηχανικός πλήρους στοίβας, με έμφαση στο πίσω μέρος και στο devOps. Ενδιαφέρομαι να δημιουργώ πρωτότυπα / MVPs και να αναπτύξω πλατφόρμες που να κλιμακώνονται στο σύννεφο, επιλέγοντας να δημιουργήσουν επιχειρηματική αξία.

Μπορείτε να διαβάσετε περισσότερα για μένα και την ιστορία μου εδώ. Αν θέλετε να συζητήσετε επιχειρήσεις ή απλώς να έρθετε σε επαφή, στείλτε μου ένα e-mail: [email protected]