Έχετε κουραστεί ποτέ να ασχολείστε με ένα Dockerfile; Τα Dockerfiles και οι εικόνες Docker είναι ένας πολύ καλός τρόπος για να συσκευάσετε την εφαρμογή σας για επαναχρησιμοποιήσιμες, κοντέινερ αναπτύξεις. Ωστόσο, η σύνταξη και η διατήρηση ενός Dockerfile δεν είναι πάντα διαισθητική και απαιτεί χρόνο που διαφορετικά θα μπορούσε να χρησιμοποιηθεί για την προσθήκη λειτουργιών στην εφαρμογή σας. Εισαγάγετε τα Cloud Native Buildpacks. Τα Buildpacks υπάρχουν για να συγκεντρώσουν όλα όσα χρειάζεται η εφαρμογή σας για να εκτελεστεί και να τα τοποθετήσετε σε μια εικόνα Open Container Initiative (OCI) — δεν απαιτείται αρχείο Docker.
Για όλους τους προγραμματιστές εκεί έξω που χρειάζονται μια διαδικασία κατασκευής κοντέινερ που είναι εύκολη στη χρήση και θα τους εξοικονομήσει χρόνο και πονοκεφάλους, τα Cloud Native Buildpacks μπορεί να είναι η λύση που αναζητούν. Ενδιαφερόμενος; Θα σου πω περισσότερα.
Τι είναι τα Cloud Native Buildpacks;
Σε γενικές γραμμές, ένα buildpack παίρνει τον κώδικα εφαρμογής και τον κάνει να τρέξει μέσω μιας διαδικασίας κατασκευής. Επομένως, τα Cloud Native Buildpacks λαμβάνουν τον πηγαίο κώδικα της εφαρμογής σας και τον μετατρέπουν σε τρέχουσες, αναπαραγώγιμες εικόνες OCI, υλοποιώντας τις απαιτήσεις σας για ασφάλεια εικόνας, βελτιστοποίηση απόδοσης και σειρά κατασκευής κοντέινερ. Είναι σαν να έχετε το ακριβές Dockerfile που χρειάζεστε — μόνο που δεν χρειάζεται να γράψετε ένα.
Ενώ οι περισσότεροι προγραμματιστές μπορούν να γράψουν ένα Dockerfile, λίγοι είναι ειδικοί είτε στο Docker είτε στην υποδομή. Πάρα πολλές εφαρμογές έχουν Dockerfiles που είναι ενσωματωμένα μεταξύ τους από αποσπάσματα κώδικα που βρίσκονται στον ιστό — συχνά συνδυάζουν Copilot, Stack Overflow και ChatGPT. Τα σφάλματα Dockerfile μπορεί να οδηγήσουν σε μη ασφαλείς και κακής απόδοσης εφαρμογές.
Τα Cloud Native Buildpacks αναλαμβάνουν αυτό το βάρος, εφαρμόζοντας αυτόματα τις βέλτιστες πρακτικές για κάθε γλώσσα ή πλαίσιο. Στη συνέχεια, ένας builder μπορεί να χρησιμοποιήσει οποιονδήποτε αριθμό buildpacks , εντοπίζοντας αυτόματα ποια buildpacks χρειάζονται και εφαρμόζοντάς τα για τη δημιουργία μιας εφαρμογής. Ακολουθούν τα buildpacks που υποστηρίζει επί του παρόντος το builder του Heroku:
$ pack builder inspect heroku/builder:24 Inspecting builder: heroku/builder:24 REMOTE: Description: Ubuntu 24.04 AMD64+ARM64 base image with buildpacks for .NET, Go, Java, Node.js, PHP, Python, Ruby & Scala. ... Buildpacks: ID NAME VERSION heroku/deb-packages Heroku .deb Packages 0.0.3 heroku/dotnet Heroku .NET 0.1.10 heroku/go Heroku Go 0.5.2 heroku/gradle Heroku Gradle 6.0.4 heroku/java Heroku Java 6.0.4 heroku/jvm Heroku OpenJDK 6.0.4 heroku/maven Heroku Maven 6.0.4 heroku/nodejs Heroku Node.js 3.4.5 heroku/nodejs-corepack Heroku Node.js Corepack 3.4.5 heroku/nodejs-engine Heroku Node.js Engine 3.4.5 heroku/nodejs-npm-engine Heroku Node.js npm Engine 3.4.5 heroku/nodejs-npm-install Heroku Node.js npm Install 3.4.5 heroku/nodejs-pnpm-engine Heroku Node.js pnpm Engine 3.4.5 heroku/nodejs-pnpm-install Heroku Node.js pnpm install 3.4.5 heroku/nodejs-yarn Heroku Node.js Yarn 3.4.5 heroku/php Heroku PHP 0.2.0 heroku/procfile Heroku Procfile 4.0.0 heroku/python Heroku Python 0.23.0 heroku/ruby Heroku Ruby 5.0.1 heroku/sbt Heroku sbt 6.0.4 heroku/scala Heroku Scala 6.0.4
Άλλοι κατασκευαστές, όπως αυτοί από το Paketo ή το Google Cloud , φέρνουν επίσης μια σειρά από buildpacks. Συνολικά, το οικοσύστημα Cloud Native Buildpacks αναπτύσσεται και ωριμάζει, κάτι που είναι συναρπαστικό για τους προγραμματιστές!
Για όσους από εσάς είναι εξοικειωμένοι με το Heroku, έχετε ήδη απολαύσει την εμπειρία του buildpack . Με git push heroku main
, μπορέσατε να αναπτυχθείτε απευθείας στο Heroku, χωρίς να απαιτείται Dockerfile. Τα Cloud Native Buildpacks βασίζονται στην εμπειρία buildpack του Heroku, παίρνοντας αυτό που κάποτε ήταν συγκεκριμένη υλοποίηση του προμηθευτή και μετατρέποντάς το σε ένα πρότυπο CNCF που μπορεί να χρησιμοποιηθεί σε οποιαδήποτε πλατφόρμα cloud.
Εν ολίγοις, τα Cloud Native Buildpacks επιτρέπουν στους προγραμματιστές να:
- Αναπτύξτε εφαρμογές πιο εύκολα από ποτέ
- … με τυπικό τρόπο χωρίς κλείδωμα
- … όλα αυτά κατά την εφαρμογή βέλτιστων πρακτικών για τα κοντέινερ
- … και χωρίς να κάνετε τους προγραμματιστές να ασχολούνται με το Dockerfiles.
Περιπτώσεις χρήσης
Ακούγεται υπέροχο, σωστά; Με όλα αυτά τα πλεονεκτήματα, ας δούμε ορισμένες συγκεκριμένες περιπτώσεις στις οποίες θα μπορούσατε να επωφεληθείτε από τη χρήση του Cloud Native Buildpacks.
Οποιοδήποτε μέρος όπου θα χρειάζεστε συνήθως ένα Dockerfile είναι μια ευκαιρία να χρησιμοποιήσετε ένα buildpack. Τα παραδείγματα περιλαμβάνουν:
- Μια εφαρμογή web Node.js
- Μια μικρουπηρεσία Python
- Μια ετερογενής εφαρμογή που χρησιμοποιεί πολλές γλώσσες ή πλαίσια
- Δημιουργία εφαρμογών για ανάπτυξη σε πλατφόρμες cloud όπως AWS, Azure και Heroku
Ένα πράγμα που πρέπει να σημειωθεί είναι το εξής: Ενώ τα buildpacks είναι δηλωτικά , τα Dockerfiles είναι διαδικαστικά . Με ένα buildpack, απλά δηλώνετε ότι θέλετε μια δεδομένη εφαρμογή να κατασκευαστεί με ένα συγκεκριμένο builder ή buildpack. Αντίθετα, ένα Dockerfile απαιτεί από εσάς να ορίσετε τις εντολές και τη σειρά με την οποία εκτελούνται αυτές οι εντολές για τη δημιουργία της εφαρμογής σας. Ως εκ τούτου, τα buildpacks δεν προσφέρουν επί του παρόντος το επίπεδο διαμορφώσεως που είναι διαθέσιμο σε ένα Dockerfile, επομένως ενδέχεται να μην ανταποκρίνεται στις ανάγκες ορισμένων πιο προηγμένων περιπτώσεων χρήσης.
Τούτου λεχθέντος, δεν υπάρχει κλείδωμα προμηθευτή με τα Cloud Native Buildpacks. Απλώς δημιουργούν μια εικόνα OCI. Χρειάζεστε περισσότερες προσαρμογές και επιλογές από αυτές που είναι διαθέσιμες στο buildpack; Απλώς αντικαταστήστε το πρόγραμμα δημιουργίας στη διοχέτευση κατασκευής σας με το Dockerfile και μια τυπική έκδοση εικόνας OCI και είστε έτοιμοι.
Μια απλή περιήγηση
Ας κάνουμε μια γρήγορη περιγραφή του τρόπου χρήσης των Cloud Native Buildpacks.
Για να ξεκινήσετε με τα buildpacks ως προγραμματιστής εφαρμογών, το πρώτο σας βήμα θα πρέπει να είναι η εγκατάσταση του εργαλείου Pack CLI . Αυτό το εργαλείο σάς επιτρέπει να δημιουργήσετε μια εφαρμογή με buildpacks. Ακολουθήστε τις οδηγίες εγκατάστασης για το λειτουργικό σας σύστημα.
Επιπλέον, εάν δεν το έχετε ήδη, θα χρειαστείτε έναν δαίμονα Docker για να δημιουργήσει ο δημιουργός την εφαρμογή σας και για να εκτελέσετε την εικόνα σας. Με αυτά τα δύο εργαλεία εγκατεστημένα, είστε έτοιμοι να ξεκινήσετε.
Δημιουργήστε ένα δείγμα εφαρμογής
Με πρόσβαση στο εργαλείο pack
, είστε έτοιμοι να το δοκιμάσετε δημιουργώντας ένα δείγμα εφαρμογής. Θα το εκτελώ μέσα σε μια εφαρμογή Next.js. Χρειάζεστε ένα δείγμα εφαρμογής για να δοκιμάσετε το buildpack; Εδώ είναι ένας πλήρης κατάλογος δειγμάτων εφαρμογών Next.js . Μπορείτε επίσης να δοκιμάσετε οποιαδήποτε εφαρμογή έχετε στη διάθεσή σας.
Μόλις ετοιμάσετε την εφαρμογή σας, ξεκινήστε βλέποντας τι πρόγραμμα δημιουργίας προτείνει το εργαλείο πακέτου. Στο κέλυφός σας, μεταβείτε στον κατάλογο της εφαρμογής σας και εκτελέστε αυτήν την εντολή:
$ pack builder suggest
Στην εγκατάσταση του Ubuntu, για την εφαρμογή Next.js, το εργαλείο pack
προτείνει τα ακόλουθα προγράμματα δημιουργίας:
Ας δοκιμάσουμε το προτεινόμενο buildpack Heroku ( heroku/builder:24
). Για να χρησιμοποιήσετε αυτό, εκτελέστε την ακόλουθη εντολή:
$ pack build my-app --builder heroku/builder:24
Ο χρόνος κατασκευής θα ποικίλλει ανάλογα με το μέγεθος της αίτησής σας. Για μένα, η δημιουργία της εφαρμογής χρειάστηκε 30 δευτερόλεπτα. Με αυτό, η εικόνα μου ήταν έτοιμη. Μπορούμε να εκτελέσουμε την εικόνα με τα εξής:
$ docker run -p 3000:3000 my-app
Το αποτέλεσμα μοιάζει με αυτό:
Και τέλος! Δημιουργήσαμε με επιτυχία μια εικόνα OCI της εφαρμογής Next.js — χωρίς να χρησιμοποιήσουμε αρχείο Docker.
Πρόσθετες διαμορφώσεις
Τι γίνεται αν χρειαστεί να διαμορφώσετε κάτι μέσα στο buildpack; Για αυτό, θα αναφέρατε τα buildpack που επιλέχθηκαν από τον κατασκευαστή σας. Για παράδειγμα, για την εφαρμογή Next.js, μπορώ να δω στα αρχεία καταγραφής ότι το πρόγραμμα δημιουργίας επέλεξε δύο πακέτα build: nodejs-engine και nodejs-yarn .
Ας πούμε ότι θέλω να καθορίσω την έκδοση νήματος που χρησιμοποιείται από το buildpack. Αρχικά, θα πήγαινα στο nodejs-yarn buildpack Readme , όπου βλέπω ότι μπορώ να καθορίσω την έκδοση νήματος στο αρχείο package.json
με ένα κλειδί packageManager
. Θα τροποποιούσα το αρχείο μου για να μοιάζει με αυτό:
{ "packageManager": "[email protected]" }
Από εκεί, το μόνο που χρειάζεται να κάνω είναι να εκτελέσω ξανά pack build my-app --builder heroku/builder:24
.
Σύναψη
Τα Cloud Native Buildpacks είναι ένας συναρπαστικός νέος τρόπος για τη δημιουργία εικόνων κοντέινερ για τις εφαρμογές μας. Καταργώντας την ανάγκη για ένα Dockerfile, καθιστούν πιο γρήγορο από ποτέ τη συσκευασία και την ανάπτυξη της εφαρμογής μας. Επιπλέον, καθώς δημιουργούν τυπικές εικόνες κοντέινερ, δεν υπάρχει κλείδωμα προμηθευτή.
Τα Cloud Native Buildpacks βρίσκονται σε προεπισκόπηση σε πολλές πλατφόρμες, πράγμα που σημαίνει ότι το σύνολο χαρακτηριστικών είναι ελαφρύ αλλά ταχέως αναπτυσσόμενο. Η Heroku, η οποία έχει ανοιχτού κώδικα τα Cloud Native Buildpacks της , τα φέρνει και στην πλατφόρμα επόμενης γενιάς της. Ανυπομονώ να δω πώς τα Cloud Native Buildpacks επιτρέπουν την ασφαλή, γρήγορη ανάπτυξη εφαρμογών στην κοινότητα της πλατφόρμας cloud.