Artykuł pochodzi z wydania: Wrzesień 2021
Technologia konteneryzacji zyskuje na znaczeniu na fali popularyzacji metodyki DevOps. Stanowi gorący trend centrów danych i chmury, upraszczając procesy tworzenia i dostarczania aplikacji oraz zarządzania nimi bez narzutu pełnej maszyny wirtualnej.
Podręcznikowa definicja opisuje konteneryzację jako typ wirtualizacji realizowanej na poziomie systemu operacyjnego. Jądro systemu hosta obsługuje w przestrzeni użytkownika wiele izolowanych środowisk obliczeniowych nazywanych kontenerami. Ma to swoje zalety i konsekwencje.
W kontrze do wirtualizacji
Konteneryzacja stanowi jeden z trzech podstawowych typów wirtualizacji obok parawirtualizacji oraz pełnej wirtualizacji. Najczęściej przytaczana różnica między pełną wirtualizacją a konteneryzacją wynika z liczby warstw abstrakcji wirtualizowanego środowiska. W klasycznej wirtualizacji stos rozwiązania obejmuje warstwę sprzętową, system operacyjny gospodarza (hosta), nadzorcę wirtualizacji (hiperwizor) oraz system operacyjny gościa, biblioteki i aplikacje uruchamiane wewnątrz każdej maszyny wirtualnej. Konteneryzacja usuwa system operacyjny gościa oraz hiperwizora, choć miejsce tego drugiego w pewnym sensie zajmuje silnik konteneryzacji np. Docker. Aplikacje, z wymaganym zestawem bibliotek i narzędzi, obsługiwane są wewnątrz izolowanego kontenera.
Kontener wykorzystuje jądro systemu hosta, co wyklucza konieczność uruchamiania oddzielnego, pełnego systemu operacyjnego dla każdego wirtualizowanego środowiska. Podejście to rodzi pewne konsekwencje. Kontener jest zależny od systemu operacyjnego hosta, co narzuca ograniczenia i wymagania w stosunku do środowiska gościa, a z perspektywy bezpieczeństwa prowadzi do rozważań, jaka forma wirtualizacji zapewnia wyższy poziom izolacji zasobów. Nie ma możliwości uruchomienia aplikacji w kontenerze w innym środowisku (systemie operacyjnym) niż to, które zostało zainstalowane na serwerze gospodarza (hosta). Warto jednak pamiętać, że łatwo można obejść te ograniczenia, uruchamiając środowisko kontenerowe wewnątrz maszyny wirtualnej z pożądanym systemem operacyjnym hosta.
Konteneryzacja ani nie zastępuje, ani nie jest lepszą wersją pełnej wirtualizacji. Zamiast uruchamiać wiele maszyn wirtualnych, każdą z własnym systemem operacyjnym, kontener zapewnia funkcjonalne środowisko do uruchamiania aplikacji z własnym zestawem bibliotek i narzędzi, pozostawiając kwestie alokacji zasobów obliczeniowych, przechowywania i sieci nieco na drugim planie. Ta cecha pozwala odnaleźć dla konteneryzacji wiele różnych zastosowań.
Konteneryzacja w jądrze
Z drugiej strony konteneryzacja jest dojrzałą technologią, która znajduje pełne wsparcie w jądrze systemu Linux. Mowa tutaj o funkcji cgroups odpowiedzialnej za przydzielanie zasobów sprzętowych kontenerom, mechanizmie przestrzeni nazw (namespaces), zapewniającym separację procesów między kontenerami, czy obsłudze systemów plików typu union (także overlay), pozwalających łączyć oraz zarządzać katalogami i plikami pochodzącymi z różnych systemów plików w ramach jednej struktury.
Technologia konteneryzacji jest równie stara co wirtualizacja, ale dopiero za sprawą Dockera i popularyzacji praktyk DevOps weszła do kanonu rozwiązań powszechnie wykorzystywanych w centrach danych i chmurze. Wielu administratorów już wcześniej miało kontakt z takimi rozwiązaniami jak mechanizmy izolowania systemu plików, użytkowników i sieci jail we FreeBSD oraz kontenerami powoływanymi do życia z wykorzystaniem platform OpenVZ czy LXC (z tej ostatniej na początku korzystał nawet Docker).
Z raportu firmy IDG „The 2020 IDG Cloud Computing Survey” wynika, że poziom zainteresowania kontenerami jest wysoki, ale ich adaptacja ciągle kuleje. Tylko (albo aż) 16% badanych przedsiębiorstw wykorzystuje kontenery w zastosowaniach produkcyjnych, a kolejne 13% w środowiskach dewelopersko-testowych. Na drugim biegunie pozostaje 35% organizacji, które eksperymentują z technologią konteneryzacji albo poszukują informacji na jej temat.
Dane te należy traktować przez pryzmat możliwych zastosowań dla tej technologii. Nie wszystkie organizacje znajdą zastosowanie dla takiej platformy. Wszystko dlatego, że w środowiskach produkcyjnych, złożonych z kontrolerów domeny, serwerów plików, baz danych czy serwerów aplikacji biznesowych, pełna wirtualizacja doskonale zdaje egzamin, a przy tym jest prostsza w implementacji i utrzymaniu.
Zastosowania kontenerów
Największe zainteresowanie konteneryzacją pojawiło się na fali rosnącej popularności metodyki DevOps. Zastosowania kontenerów celnie oddaje przeznaczenie Dockera. To platforma do tworzenia, wdrażania i uruchamiania aplikacji przeznaczona dla programistów, testerów i administratorów. Pozwala spakować i uruchamiać aplikacje w lekkim, izolowanym środowisku zwanym kontenerem, który zawiera wszystko co potrzebne do obsługi danej aplikacji niezależnie od tego, na jakim fizycznym komputerze (hoście) taki kontener zostanie wdrożony.
W rezultacie użytkownicy mogą przenosić swoje aplikacje w kontenerach, mając pewność, że uruchomione za każdym razem będą działać dokładnie w ten sam sposób. Kontener, zawierając zestaw wymaganych bibliotek, narzędzi oraz kod aplikacji, jest samowystarczalny, ma własny system plików oraz konfigurację, w tym zmienne środowiskowe.
[…]
Artur Pęczak
Autor zawodowo zajmuje się informatyką. Publikuje w magazynach komputerowych i serwisach internetowych.