Kontenery, czyli wykonywalne jednostki oprogramowania, zyskują coraz większą popularność w branży software development. Architekci rozwiązań IT i developerzy, którzy wzięli udział w badaniu fundacji CNCF „Cloud Native Survey 2020” do najważniejszych korzyści płynących konteneryzacji zaliczyli zwiększoną skalowalność i krótszy czas wdrożenia (51%) oraz wyższą dostępność (44%).

Co to jest konteneryzacja?

Kontener to samodzielny pakiet oprogramowania, który zawiera wszystkie komponenty niezbędne do uruchomienia aplikacji: kod źródłowy, środowisko uruchomieniowe, narzędzia i biblioteki systemowe oraz pliki konfiguracyjne. Taki kontener można następnie uruchomić w dowolnym miejscu — na komputerze, w tradycyjnym środowisku IT lub w chmurze.

Jest to możliwe, ponieważ kontenery wykorzystują wirtualizację systemu operacyjnego maszyny, na której się znajdują. W ramach takiego rozwiązania OS rozdziela procesy i kontroluje zasoby procesora, pamięci operacyjnej oraz masowej, do których dostęp mają kontenery. 

Powyższa architektura jest źródłem największych zalet konteneryzacji, do których należą:

  • Wydajność – Kontenery umożliwiają lepsze wykorzystanie procesora i pamięci, ponieważ współużytkują jądro systemu operacyjnego maszyny fizycznej, a same potrzebują niewielu zasobów;
  • Skalowalność – Rozbudowane i wymagające aplikacje mogą być dzielone na mikroserwisy, co zapewnia im stabilne działanie nawet przy znacznym obciążeniu;
  • Przenośność – Kontenery zawierają wszystko, co jest potrzebne do uruchomienia znajdującego się w nich kodu, dzięki czemu oprogramowanie może zostać napisane raz, a następnie być uruchamiane bez konieczności ponownego konfigurowania na różnych środowiskach czy infrastrukturze;
  • Separacja instancji – Kontenery są od siebie oddzielone, co pozwala na wprowadzanie zmian w jednym z nich, bez zaburzeń w sąsiadujących z nim;
  • Wsparcie rozwoju i zmian – Wprowadzanie nowych funkcjonalności wymaga wyłączenia jedynie aktualizowanej części systemu. Dzięki swojej lekkości, szybkości i niewielkiemu zużyciu zasobów są doskonałym rozwiązaniem w testowaniu oprogramowania.

Konteneryzacja a wirtualizacja

W przypadku tradycyjnej wirtualizacji — niezależnie od tego, czy odbywa się ona w środowisku lokalnym, czy w chmurze — wirtualizowany jest sprzęt fizyczny z pomocą hypervisora (nadzorcy). Każda maszyna wirtualna (VM) składa się z systemu operacyjnego (OS), wirtualnej kopii sprzętu koniecznego do jego działania oraz aplikacji i powiązanych z nią zależności.

Zamiast sprzętu kontenery wirtualizują system operacyjny, dlatego każdy kontener zawiera tylko kod oraz biblioteki i zależności. Brak własnego OS sprawia, że kontenery są “lżejsze” od maszyn wirtualnych – dzięki temu zużywają znacznie mniej zasobów oraz pozwalają na szybsze uruchamianie aplikacji.

Współdzielenie systemu operacyjnego z hostem czyni je podatnymi na tzw. “ucieczkę z kontenera”. Oznacza to, że osoba niepowołana może uzyskać dostęp administracyjny nie tylko do danego kontenera, ale też do samej maszyny i wszystkich pozostałych kontenerów znajdujących się na niej. W przypadku maszyn wirtualnych problem ten niemalże nie występuje, ponieważ są one od siebie odizolowane, a przejęcie praw administratora dotyczy jedynie tej konkretnej VM.

Na szczęście ucieczka z kontenera składa się z wielu etapów i można ją powstrzymać na każdym z nich, a zabezpieczenia kontenerów są stale rozwijane. Warto jednak pamiętać, że takie ryzyko istnieje.

Konteneryzacja w praktyce

Dzięki swojej strukturze kontenery stanowią doskonałą podstawę pod architekturę mikroserwisów, czyli podejście do tworzenia aplikacji podzielonych na wiele modułów. Każdy moduł ma ściśle określony cel i może być łączony z innymi mikroserwisami tworząc spójną całość. 

Oprogramowanie zbudowane z wielu oddzielnych, ale współdziałających “cegiełek” łatwo jest rozwijać i utrzymywać. W takiej architekturze awaria jednej części nie powoduje zatrzymania całości – jedynie danej funkcjonalności. Tym samym mikroserwisy utrzymują stałą dostępność usług, nie narażając firm na straty finansowe, a także znacznie ułatwiają rozwój aplikacji.

Kontenery to jednak nie tylko “opakowanie” dla mikroserwisów. Można je zastosować również w poniższych scenariuszach:

  • Modernizacja i migracja aplikacji – Konteneryzacja umożliwia migrację do chmury nawet starszego oprogramowania.
  • Internet rzeczy – Ponieważ kontenery dostarczają oprogramowanie w postaci łatwych do wdrożenia, przenośnych pakietów, są idealnym sposobem na instalację i aktualizację aplikacji działających na urządzeniach IoT.
  • Continuous Integration and Delivery (CI/CD) – Kontenery umożliwiają DevOps częstsze dostarczania pewnych, przetestowanych i sprawdzonych zmian w kodzie, ułatwiając implementację praktyk CI/CD, czyli ciągłej integracji i ciągłego dostarczania.

Kontenery w chmurze

Korzystanie z kontenerów zapewnia wiele korzyści, ale wiąże się też z potencjalnymi trudnościami. Ponieważ jest to młoda technologia, zainteresowane organizacje nie zdobyły jeszcze wszystkich niezbędnych do korzystania z niej kompetencji. 

Doskonałym rozwiązaniem dla firm zainteresowanych wdrożeniem konteneryzacji jest skorzystanie z kontenerów w chmurze. Ich dostawcy oferują wsparcie w zakresie konteneryzacji na wielu poziomach:

  • Centrum danych – Odpowiednie warunki klimatyczne, fizyczne zabezpieczenia oraz redundancję na poziomie sprzętu, sieci, energii i personelu
  • Fizyczny sprzęt – Infrastruktura klasy Enterprise,
  • Wirtualizacja i konteneryzacja – Wsparcie w zakresie tworzenia oraz optymalizacji środowisk pod kontenery,
  • Administracja – Profesjonalne monitorowanie i zarządzanie.

W ciągu kilku najbliższych lat konteneryzacja wpisze się w krajobraz IT na dobre – wskazuje na to między innymi badanie firmy IBM, w którym 79% respondentów (developerzy i CTO) uważa, że kontenery będą stanowiły część długofalowej strategii rozwoju. Już teraz warto sprawdzić ich możliwości w chmurze – bez wątpienia zwiększą zwinność polskich firm i przygotują je na dalszy rozwój.