Alpine Linux najlepszym przyjacielem kontenerów

Czy ma znaczenie, jaki obraz wyjściowy użyjemy do budowy naszego kontenera? Mało kto zaczyna od pustego kontenera. Zazwyczaj jako bazę bierzemy taki, który zawiera jedną z popularnych dystrybucji Linuksa. Czy ma znaczenie jaka to będzie dystrybucja? Jak się okazuje ogromne. Dlatego ja staram się budować swoje kontenery przy pomocy obrazów, które zostały stworzone na bazie Alpine Linux.

Baza dla Twojego kontenera

Każdy obraz kontenera musi zaczynać się od obrazu nadrzędnego lub obrazu podstawowego (podstawa). Obraz nadrzędny to obraz, na którym opierasz swój obraz. Obraz podstawowy jest jak całkowicie pusty kontener, który musisz wypełnić treścią. Ale w większości przypadków będziesz używać innego obrazu jako rodzica i chcesz, aby był jak najmniejszy. Alpine Linux to Twój przyjaciel – zapamiętaj tą nazwę i używaj tej dystrybucji tak często, jak to możliwe.

Kiedy budujesz obraz od zera, musisz najpierw stworzyć główny system plików i dodać podstawowe biblioteki. Porównując wiele minimalistycznych dystrybucji Linuksa, możemy łatwo zauważyć, że różnią się one tym, co autorzy myślą o „minimalizmie”. Czasami zawiera ona narzędzia używane przez autora, innym razem zależy zestaw zainstalowanych pakietów zależy od tego, do czego jest profilowana dystrybucja. Jednym z takich przykładów jest system operacyjny VMware Photon skrojony pod Dockera. Jego minimalna instalacja zawiera tylko podstawowe elementy wymagane do uruchomienia Dockera i całej konfiguracji, a jądro jest domyślnie wzmocnione pod kątem bezpieczeństwa kontenerów.

Podczas tworzenia obrazu platformy Docker chcesz, aby był mały i bezpieczny. Aby osiągnąć oba cele, musisz zacząć od zera i utworzyć obraz tylko z wymaganymi pakietami lub użyć obrazu podstawowego i jego minimalnej konfiguracji. Alpine Linux to zorientowana na bezpieczeństwo, lekka dystrybucja Linuksa. Bazuje na musl libc i busybox, dzięki czemu doskonale spełnia te wymagania. Wystarczy, że po prostu odwołasz się do kontenera alpine w definicji FROM. W wielu projektach dodaje się do tagu obrazu „-alpine”, jeśli obrazem podstawowym był Alpine Linux.

Mniej pakietów, to mniej luk bezpieczeństwa

Im mniej pakietów używasz do zbudowania obrazu kontenera, tym lepsze jest bezpieczeństwo. Każdy dodatkowy pakiet zwiększa ryzyko, że zawiera on lukę, która może narazić aplikację lub infrastrukturę na ryzyko. Oznacza to również, że kontener z duża ilością pakietów zajmie więcej miejsca na dysku i w pamięci. Obrazy podstawowe ze znanych dystrybucji zawierają domyślnie dość wiele bibliotek. Oficjalny rozmiar obrazu Ubuntu 18.04 to 84 MB, Centos to 200 MB, Debian 101 MB, a Alpine to tylko 4,4 MB. Otrzymujemy podstawowy system operacyjny obrazu prawie z niczym i mamy pełną kontrolę nad tym, co instalujemy, aby spełnić wymagania naszej aplikacji.

Na koniec przykład z mojego laba, w którym buduję sam obrazy oprogramowania Jenkins. Na początek porównanie rozmiarów obrazów zbudowanych o openjdk:8-jdk-stretch oraz adoptopenjdk/openjdk8:jdk8u262-b10-alpine. 

Porównanie rozmiarów kontenerów Jenkins 2.256
Porównanie rozmiarów kontenerów Jenkins 2.256

A teraz zestawienie liczby wykrytych przez skaner Clair pakietów ze znanymi podatnościami

Podatności w obrazie Jenkins 2.256 zbudowanym na bazie typowej dystrybucji
Podatności w obrazie Jenkins 2.256 zbudowanym na bazie typowej dystrybucji
Podatności w obrazie Jenkins 2.256 zbudowanym na bazie dystrybucji Alpine Linux
Podatności w obrazie Jenkins 2.256 zbudowanym na bazie dystrybucji Alpine Linux

Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)