Jeste li se ikada umorili od petljanja s Dockerfileom? Docker datoteke i Docker slike izvrstan su način za pakiranje vaše aplikacije za višekratnu upotrebu u spremnicima. Međutim, pisanje i održavanje Dockerfilea nije uvijek intuitivno i oduzima vrijeme koje bi se inače moglo iskoristiti za dodavanje značajki vašoj aplikaciji. Unesite Cloud Native Buildpacks. Postoje paketi za izradu kako bi spojili sve što je vašoj aplikaciji potrebno za pokretanje i stavili u sliku Open Container Initiative (OCI) — Dockerfile nije potreban.
Za sve programere koji trebaju proces izrade spremnika koji je jednostavan za korištenje i koji će im uštedjeti vrijeme i glavobolje, Cloud Native Buildpacks bi moglo biti rješenje koje traže. Zainteresirani? Reći ću ti više.
Što su Cloud Native Buildpacks?
Općenito govoreći, buildpack uzima aplikacijski kod i čini ga pokretljivim kroz proces izgradnje. Dakle, Cloud Native Buildpacks preuzimaju izvorni kod vaše aplikacije i pretvaraju ga u OCI slike koje se mogu izvoditi i reproducirati, implementirajući vaše zahtjeve za sigurnost slike, optimizaciju performansi i redoslijed izgradnje spremnika. To je kao da imate točno onaj Dockerfile koji vam je potreban — samo što ga ne morate napisati.
Dok većina programera može napisati Dockerfile, malo ih je stručnjaka za Docker ili infrastrukturu. Previše aplikacija ima Dockerfileove koji su sastavljeni od isječaka koda koji se nalaze diljem weba — često mješavina Copilota, Stack Overflowa i ChatGPT-a. Pogreške Dockerfilea mogu dovesti do nesigurnih aplikacija koje rade loše.
Cloud Native Buildpacks preuzimaju ovaj teret, automatski primjenjujući najbolje prakse za svaki jezik ili okvir. Graditelj zatim može upotrijebiti bilo koji broj buildpack-ova , automatski otkrivajući koji su buildpacks potrebni i primjenjujući ih za izradu aplikacije. Ovo su paketi za izgradnju koje Heroku's builder trenutno podržava:
$ 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
Drugi graditelji, poput onih iz Paketa ili Google Clouda , također donose niz paketa za izgradnju. Sve u svemu, ekosustav Cloud Native Buildpacks raste i sazrijeva, što je uzbudljivo za programere!
Za one od vas koji su upoznati s Herokuom, već ste uživali u iskustvu buildpacka . Uz git push heroku main
, mogli ste se implementirati izravno na Heroku, bez potrebe za Dockerfileom. Cloud Native Buildpacks grade se na iskustvu Heroku buildpacka, preuzimajući ono što je nekoć bila specifična implementacija dobavljača i pretvarajući ga u CNCF standard koji se može koristiti na bilo kojoj platformi u oblaku.
Ukratko, Cloud Native Buildpacks programerima omogućuju sljedeće:
- Implementirajte aplikacije jednostavnije nego ikada
- … na standardni način bez zaključavanja
- … sve uz primjenu najboljih praksi spremnika
- ... i bez tjeranja programera da petljaju s Dockerfilesom.
Slučajevi upotrebe
Zvuči super, zar ne? Sa svim ovim prednostima, pogledajmo neke specifične slučajeve u kojima biste mogli imati koristi od korištenja Cloud Native Buildpacks.
Bilo koje mjesto gdje biste inače trebali Dockerfile je prilika za korištenje buildpacka. Primjeri uključuju:
- Web aplikacija Node.js
- Python mikroservis
- Heterogena aplikacija koja koristi više jezika ili okvira
- Izrada aplikacija za implementaciju na platformama u oblaku kao što su AWS, Azure i Heroku
Jedna stvar koju treba napomenuti je sljedeća: Dok su paketi za izgradnju deklarativni , Dockerfiles su proceduralni . S buildpackom jednostavno izjavljujete da želite da se određena aplikacija izgradi s danim builderom ili buildpackom. Nasuprot tome, Dockerfile zahtijeva od vas da definirate naredbe i redoslijed kojim se te naredbe izvode za izradu vaše aplikacije. Kao takvi, buildpacks trenutno ne nude razinu konfiguracije koja je dostupna unutar Dockerfilea, tako da možda neće zadovoljiti potrebe nekih naprednijih slučajeva upotrebe.
Uz to, ne postoji vezanost dobavljača s Cloud Native Buildpacks. Oni jednostavno grade OCI imidž. Trebate više prilagodbi i opcija nego što je dostupno u buildpacku? Jednostavno zamijenite builder u svom cjevovodu za izgradnju sa svojim Dockerfileom i standardnom OCI slikom za izgradnju, i spremni ste.
Jednostavan vodič
Napravimo kratak vodič o tome kako koristiti Cloud Native Buildpacks.
Da biste započeli s buildpacks-om kao programer aplikacija, vaš bi prvi korak trebao biti instaliranje alata Pack CLI . Ovaj vam alat omogućuje izradu aplikacija pomoću paketa za izgradnju. Slijedite upute za instalaciju vašeg operativnog sustava.
Osim toga, ako ga već nemate, trebat će vam Docker demon da programer izgradi vašu aplikaciju, a vi da pokrenete svoju sliku. S ova dva instalirana alata, spremni ste za početak.
Izradite oglednu aplikaciju
Uz pristup alatu pack
, spremni ste ga isprobati izgradnjom ogledne aplikacije. Ovo ću pokrenuti unutar Next.js aplikacije. Trebate uzorak aplikacije za testiranje buildpack-a? Ovdje je cijeli imenik primjera aplikacija Next.js. Također možete isprobati bilo koju aplikaciju koja vam je pri ruci.
Nakon što pripremite svoju aplikaciju, počnite tako što ćete vidjeti koji alat za izradu paketa predlaže. U svojoj ljusci idite u direktorij svoje aplikacije i pokrenite ovu naredbu:
$ pack builder suggest
Na mojoj Ubuntu instalaciji, za moju aplikaciju Next.js, alat pack
predlaže sljedeće programere:
Isprobajmo predloženi Heroku buildpack ( heroku/builder:24
). Da biste koristili ovaj, pokrenite sljedeću naredbu:
$ pack build my-app --builder heroku/builder:24
Vrijeme izgradnje će varirati ovisno o veličini vaše aplikacije; za mene je izrada aplikacije trajala 30 sekundi. S tim je moja slika bila spremna za rad. Sliku možemo pokrenuti sa sljedećim:
$ docker run -p 3000:3000 my-app
Rezultat izgleda ovako:
I to je to! Uspješno smo izgradili OCI sliku naše Next.js aplikacije — bez korištenja Dockerfilea.
Dodatne konfiguracije
Što ako trebate nešto konfigurirati unutar buildpacka? Za ovo biste se pozvali na buildpack(ove) koje je odabrao vaš graditelj. Na primjer, za moju aplikaciju Next.js, mogu vidjeti u zapisnicima da je graditelj odabrao dva paketa za izgradnju: nodejs-engine i nodejs-yarn .
Recimo da želim navesti verziju pređe koju koristi buildpack. Prvo bih otišao na nodejs-yarn buildpack Readme , gdje vidim da mogu navesti verziju pređe u svojoj datoteci package.json
s ključem packageManager
. Modificirao bih svoju datoteku da izgleda ovako:
{ "packageManager": "[email protected]" }
Odatle, sve što bih trebao učiniti je ponovno pokrenuti pack build my-app --builder heroku/builder:24
.
Zaključak
Cloud Native Buildpacks uzbudljiv su novi način za izradu slika spremnika za naše aplikacije. Uklanjanjem potrebe za Dockerfileom, brže su nego ikad zapakirali i implementirali našu aplikaciju. Osim toga, budući da izrađuju standardne slike spremnika, nema zaključavanja dobavljača.
Cloud Native Buildpacks su u pretpregledu na mnogim platformama, što znači da je skup značajki lagan, ali brzo raste. Heroku, koji je otvorio svoje Cloud Native Buildpacks , također ih donosi na svoju platformu sljedeće generacije . Radujem se što ću vidjeti kako Cloud Native Buildpacks omogućuju sigurnu i brzu implementaciju aplikacija u zajednici platforme u oblaku.