Pomoc zdalna
  • tag
  • buildpacks
Pexels, Kampus Production
Tag

#buildpacks

Buildpacks zamieniają katalog z kodem w gotowy obraz kontenera bez pliku z przepisem. Tu jest mechanizm rozpoznawania, przebieg budowy i lista rzeczy, które ta wygoda zabiera.

1 wpis z tym tagiem

Zaczyna się od sytuacji, którą zna każdy zespół oddający swój program na serwer: katalog z kodem istnieje, obrazu kontenera nie ma, a między jednym a drugim stoi plik z przepisem, który ktoś musi napisać i potem pilnować przez lata. Buildpacks likwidują ten plik. Kod wchodzi do narzędzia, obraz wychodzi, przepisu nikt nie pisze.

Wyobraź sobie dwa sposoby oddania obiadu w cudze ręce: kartka z recepturą albo koszyk z zakupami. W pierwszym wypadku odpowiadasz za każdy krok i za każdą wersję składnika. W drugim kucharz zagląda do koszyka, rozpoznaje, co dostał, i sam wie, co z tym zrobić, bo robi to zawodowo po kilkaset razy w tygodniu.

Kto rozpoznaje zawartość koszyka

Pojedynczy buildpack jest kawałkiem oprogramowania odpowiedzialnym za jedną technologię: środowisko uruchomieniowe języka, menedżera zależności, serwer aplikacji. Buildpacki spakowane razem z obrazem bazowym tworzą konstruktora, czyli zestaw, którym firma faktycznie buduje.

Przebieg otwiera faza wykrycia. Każdy buildpack z zestawu dostaje po kolei dostęp do katalogu z kodem i odpowiada na jedno pytanie: czy to jego robota. Obecność pliku opisującego zależności języka, wskazanie wersji, charakterystyczna struktura katalogów. Odpowiedź jest dwustanowa, a te, które odpowiedziały twierdząco, układają się w uporządkowaną grupę wykonawczą.

Dzięki temu projekt w Javie i projekt w Pythonie przechodzą przez ten sam konstruktor i wychodzą jako dwa poprawnie zbudowane obrazy, choć nikt nie powiedział narzędziu, w czym są napisane.

Przebieg budowy krok po kroku

Całością steruje program nazwany cyklem życia i jego etapy mają ustaloną kolejność.

  1. Analiza sięga po dane z poprzedniego budowania tego samego obrazu.
  2. Wykrycie ustala grupę buildpacków, tak jak wyżej.
  3. Odtworzenie wciąga z pamięci podręcznej warstwy z pobranymi wcześniej zależnościami.
  4. Budowa uruchamia buildpacki po kolei, każdy dokłada swoje warstwy.
  5. Eksport składa z tego obraz zgodny ze standardem otwartych kontenerów i dopisuje mu opis zawartości.

Wynik jest zwykłym obrazem, więc leży w tym samym rejestrze co pozostałe i uruchamia go ten sam silnik. Zmienia się droga jego powstania, nie format.

Podmiana spodu bez powtarzania pracy

Tu leży rzecz, której plik z przepisem nie ma i której nie da się do niego dopisać. Warstwy aplikacji są w tym modelu oddzielone od warstwy systemu operacyjnego świadomie i trwale, więc łatka bezpieczeństwa w systemie bazowym nie wymaga budowania obrazu od nowa. Operacja podmienia sam spód, a warstwy z programem zostają nietknięte.

Konsekwencja jest wymierna. Aktualizacja systemu w kilkuset obrazach naraz przestaje być kilkuset budowaniami, a staje się przestawieniem wskaźnika, wykonalnym w minuty i bez ryzyka, że któryś obraz zbuduje się inaczej niż poprzednio, bo w międzyczasie zmieniła się jakaś biblioteka z sieci.

Skąd to pochodzi i kto tego pilnuje

Pomysł wyrósł z dwóch starszych ekosystemów, heroku i cloud foundry, które robiły to samo osobno i niezgodnie ze sobą. Cloud Native Buildpacks powstały jako wspólna specyfikacja tych światów, trafiły do fundacji cloud native w 2018 roku i w lipcu 2026 osiągnęły w niej najwyższy stopień dojrzałości. Wzorcowym narzędziem wiersza poleceń jest pack, a wśród firm korzystających z tego mechanizmu są między innymi Google, GitLab, DigitalOcean i HashiCorp.

Za co się płaci wygodą

Za kontrolę. Obraz zbudowany tą drogą zawiera to, co uznał za potrzebne autor buildpacka, i bywa większy niż ręcznie przycięty. Kiedy budowanie się wywala, komunikat pochodzi z warstwy pośredniej, więc szukanie przyczyny wymaga zrozumienia cyklu życia, a nie tylko własnego kodu.

Nietypowa zależność bywa granicą. Program potrzebujący biblioteki systemowej spoza standardowego zestawu wymaga rozszerzenia zestawu albo napisania własnego buildpacka, czyli dokładnie tej pracy, której to podejście miało oszczędzić.

Trzecia rzecz jest cicha: zestaw buildpacków jest cudzym oprogramowaniem decydującym o zawartości obrazów produkcyjnych. Konstruktor od zewnętrznego dostawcy trzeba przypiąć do konkretnej wersji i wiedzieć, kto go utrzymuje, bo zmiana po jego stronie zmienia zawartość obrazów po tej stronie.

Kiedy lepiej napisać przepis samodzielnie

Projekt z nietypowym sposobem kompilacji, wymagający konkretnych bibliotek systemowych albo kilkuetapowej budowy z wieloma obrazami pośrednimi, opisuje się prościej plikiem niż walką z rozpoznawaniem. Podobnie wygląda to przy wymogu, żeby zawartość obrazu była wypisana co do pakietu, na przykład przy audycie.

Buildpacks nie pomogą też tam, gdzie problemem nie jest budowanie, tylko sam sposób pracy z kontenerami: brak rejestru, brak przypiętych wersji, brak testu po zbudowaniu. Zamiana pliku z przepisem na automat niczego z tej listy nie skreśla, przesuwa jedynie miejsce, w którym powstaje obraz.

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?