Od pewnego czasu branża IT emocjonuje się projektem open source – Docker. Jest to interesujące rozwiązanie do umieszczania aplikacji w tzw. kontenerach, które bywa określane mianem drugiej rewolucji wirtualizacji serwerów. Mimo ewidentnych zalet, projekt ma też istotne ograniczenia.

W 2014 r. Docker otrzymał aż 40 mln USD dofinansowania. Przez zwolenników jest pozycjonowany jako rozwiązanie ostatecznie zaspokajające potrzeby związane z wirtualizacją. Często podkreśla się też, że doprowadzi do rewolucji w branży IT. Mimo potencjału tego projektu, ta retoryka wydaje się mocno przesadzona. Często mylnie interpretuje się bowiem wartość, jaką niesie sklep z aplikacjami, w którym zgromadzono już 35 tys. programów zbudowanych w kontenerach Docker. Część z nich może nieźle namieszać w niektórych obszarach IT, jednak umieszczanie ich wszystkich w jednym worku pod hasłem „Docker zmieni świat” jest błędnym rozumowaniem. A szkoda, bo zaciera to faktyczną, ogromną wartość tego projektu.

Kompromisy związane z wykorzystaniem Dockera

Wartość Dockera polega, m.in. na realizacji powtarzalnego procesu wdrażania i uruchamiania aplikacji, w czym to oprogramowanie bardzo dobrze się sprawdza. Wykorzystuje ono mechanizm kontenerów wbudowany w Linuksa, czyli formę lekkiej wirtualizacji, która jest alternatywą dla tradycyjnych hypervisorów. Główna różnica tkwi w zasobach, które są współdzielone. W przypadku kontenerów współdzielony jest sprzęt oraz jądro systemu operacyjnego, podczas gdy wirtualizacja serwerów współdzieli tylko sprzęt. Docker wykorzystuje mechanizm Linux Containers (LXC), który działa w tym samym systemie operacyjnym, kontrolującym daną maszynę fizyczną. To umożliwia współdzielenie wielu zasobów systemowych. Natomiast w pełni zwirtualizowany system otrzymuje własny zbiór zasobów i współdzieli je w minimalnym zakresie. Przez to wymaga więcej zasobów, jest cięższy.

Kontenery cechują się lepszą wydajnością niż wirtualizacja z użyciem hypervisora, ponieważ jedno współdzielone jądro systemu oznacza mniejszy narzut. Testy pokazały, że – w porównaniu z uruchamianiem aplikacji bezpośrednio na sprzęcie – konteneryzacja nie powoduje utraty wydajności. Ma to swoją cenę – system operacyjny komputera-gospodarza i system operacyjny w kontenerze muszą korzystać z tego samego jądra, co oznacza, że w Linuksie można uruchamiać tylko kontenery z Linuksem. Ponadto kontenery charakteryzują się słabszą izolacją niż maszyny wirtualne, ich zabezpieczenie jest więc trudniejsze.

Wydajność kontenerów – lepsza niż maszyn wirtualnych – jest często używana do podkreślenia wyższości Dockera. Ale jest to argument, któremu nadaje się zbyt dużą wagę. Mechanizmy konteneryzacji istnieją już od jakiegoś czasu i kwestia wydajności jak dotąd niewiele zmieniła w praktyce.

Faktyczna rewolucja kontenerowa

Rzeczywista wartość Dockera polega na tym, że jest to nowy, lepszy – łatwiejszy i szybszy – sposób opakowania aplikacji. W Dockerze osiągnięto to dzięki wykorzystaniu zwykłych plików tekstowych – Dockerfile, które zawierają definicje różnych parametrów, jak wskazanie, którego obrazu Docker ma używać, czy też jakie programy uruchomić. Wykorzystujący polecenia Dockera, użytkownik może konwertować pliki Dockerfile na obrazy, które następnie można przenosić i uruchamiać na dowolnej maszynie, w której zainstalowany jest Docker. Korzyść z tego jest taka, że obraz działa wszędzie w taki sam sposób, wykorzystując prostą komendę „docker run”. Jest to ogromna zaleta.

Nawet korzystając z aplikacji, które są niezależne od platformy (np. Java), można napotkać na problemy związane z zarządzaniem, które doprowadzą do niepowodzenia całego wdrożenia. W przypadku Dockera coś takiego nie może się zdarzyć. Choć są inne rozwiązania do wdrażania aplikacji, żadne nie oferuje połączenia łatwości i szybkości, jakimi charakteryzuje się Docker. Warto zauważyć, że korzystanie z Dockera do opakowywania programów to po prostu kolejny sposób na wdrażanie aplikacji.

Dużo pracy przed twórcami Dockera

Zdaniem swoich zwolenników, Docker rzuci wyzwanie całemu ekosystemowi IT, począwszy od wirtualizacji i chmury. Ma za tym przemawiać wizja przyszłości, w której każda aplikacja jest umieszczona w kontenerze i wdrażana w ogromnej puli zasobów sprzętowych z wykorzystaniem specjalnych, zautomatyzowanych mechanizmów. Przedsmak tej koncepcji dają takie rozwiązania, jak Google Kubernetes oraz Apache Mesos. W ten sposób eliminuje się wdrażanie hypervisorów i platform chmurowych.

Jednakże to wciąż jest dość odległa przyszłość, ponieważ do pokonania pozostały poważne wyzwania techniczne. Słabsza – w porównaniu do maszyn wirtualnych – izolacja kontenerów pozostawia obawy dotyczące bezpieczeństwa. Co więcej, wciąż trwają dyskusje, czy konteneryzacja to technologia pasująca do środowisk korporacyjnych. Przedsiębiorstwom będzie trudno korzystać tylko z linuksowego jądra systemu operacyjnego, skoro znaczna część aplikacji pracuje w środowisku Windows. Na koniec, niektóre aplikacje, jak bazy danych, sprawiają szereg trudności w przypadku wdrażania w puli rozproszonych zasobów. Przeniesienie kontenera z aplikacją z jednego komputera na drugi jest proste, ale znacznie trudniejsza jest już migracja dużych ilości danych.

Mimo, że Docker jest nowym, lepszym sposobem opakowywania aplikacji, warto też zwrócić uwagę na inne ważne aspekty. Za projektem stoi już spory ekosystem różnych technologii IT. Przykładowo, fakt umieszczenia aplikacji w kontenerze nie eliminuje konieczności używania narzędzi do zarządzania konfiguracją. Co prawda Docker umożliwia użytkownikom uruchamianie aplikacji, ale to nie znaczy, że eliminuje potrzebę wirtualizacji, orkiestracji i zarządzania konfiguracją. Jego rzeczywistą wartością są narzędzia do opakowywania aplikacji i jest częścią rozwijającego się ekosystemu. Czy zburzy dotychczasowy porządek panujący w branży IT? Raczej nie. Choć oczywiście jego podejście oparte na współpracy i szeroka społeczność mają potencjał do wytyczania kierunków, w których ta branża będzie podążać.

Podziel się na:
  • Facebook
  • Google Bookmarks
  • LinkedIn