Docker – Podstawowa idea (Wirtualizacja vs. Konteneryzacja)

Po co nam Docker?

W sieci jest obecnie mnóstwo narzędzi do emulacji środowisk deweloperskich. Dlaczego warto się ukłonić w kierunku Dockera? Podstawowym zamysłem Dockera jest umieszczenie aplikacji oraz jej wszystkich zależności w jednostce zbudowanej pod kątem wytwarzania, testowania jak również wdrażania oprogramowania. W kontenerach Dockera znajduje się nie tylko kod programu. Znajdziemy tutaj wszelkiego rodzaju narzędzia oraz biblioteki systemowe i skonfigurowane środowisko uruchomieniowe. Czyli wszytko to co musiało by być skonfigurowane na serwerze. Takie rozwiązanie gwarantuje nam, że oprogramowanie zawsze będzie działało w identyczny sposób, nie ważne w jakim środowisku zostanie wdrożone. Docker pozwala na utworzenie projektu w środowisku Node lub Apache (lub innych), nie zmuszając programisty do instalowania żadnego z tych środowisk w systemie operacyjnym hosta. W sytuacji kiedy projekt nie jest już potrzebny, usuwany jest obraz Dockera, a system hosta pozostaje nienaruszony. Tak więc, Dockera należy traktować jako narzędzie pomagające rozwiązać typowe problemy, a dokładniej instalacji i dystrybucji oprogramowania. Innymi słowy, Docker umożliwia tworzenie, dostarczanie i uruchamianie kodu w dowolnym miejscu.

Konteneryzacja vs. Wirtualizacja

Dla pełnego zrozumienia, czym tak naprawdę jest Docker, musimy zrozumieć różnicę pomiędzy tradycyjną wirtualizacją i konteneryzacją.

Wirtualizacja

W tradycyjnej wirtualizacji mamy do czynienia z kompletnym systemem operacyjnym działającym na bazie systemu operacyjnego hosta. Istnieje dużo rozwiązań korzystających z wirtualizacji. Jedną z najważniejszych zalet jest możliwość uruchomienia wielu maszyn wirtualnych z różnymi systemami operacyjnymi na jednym hoście. Maszyny te ze względu na izolację są bardzo bezpieczne. Jednak takie rozwiązanie ma tez swoje wady. Maszyny wirtualne zazwyczaj są ciężkie i zużywają dużo zasobów. Konieczna jest również pełna instalacja systemu operacyjnego i jego konfiguracja. Maszyny wirtualne zużywają znacznie więcej zasobów na własne potrzeby np. aby uruchomić aplikację na maszynie wirtualnej, hipernadzorca musi ją zaimportować oraz załadować. W takich przypadkach wydajność maszyny może spaść. Podsumowując, ze względu na wysokie zapotrzebowanie maszyn wirtualnych na zasoby sprzętowe na jednym hoście efektywnie może działać tylko kilka maszyn wirtualnych w zależności od specyfikacji naszego urządzenia.

 

Konteneryzacja

Docker działa nieco inaczej. Działa on w izolowanym środowisku zwanym kontenerem Dockera. Tak więc nie jest to w ogólnie przyjętym znaczeniu maszyna wirtualna. Reprezentuje on wirtualizację systemu operacyjnego.  Obrazy maszyn wirtualnych działaja w systemie operacyjnym gościa. Obrazy Dockera natomiast funkcjonują w obrębie jądra tego samego systemu operacyjnego. Każdy z kontenerów ma własny system plików i zmienne środowiskowe oraz jest samowystarczalny. Ze względu na działanie wewnątrz jednego jądra, kontenery zużywają mniej zasobów systemowych. Dzięki temu podstawowy kontener jest zazwyczaj bardzo lekki. Wszystkie kontenery Dockera są izolowane nie tylko od bazowego systemu operacyjnego, ale również od siebie samych. Uzyskanie wydajności niemalże sprzętowej bez narzutu innego systemu operacyjnego jest możliwe ponieważ nie jest generowane dodatkowe obciążenie związane z klasyczną wirtualizacją. Dzięki temu czas rozruchu aplikacji, która korzysta z Dockera, jest bardzo krótki. Wynika to z małego obciążenia powodowanego przez kontenery.

 

Reasumując

Jak można zauważyć, Docker dość mocno różni się od tradycyjnej wirtualizacji, jednak należy pamiętać, że kontenery nie mogą zastąpić tradycyjnej wirtualizacji we wszystkich zastosowaniach. Oba z rozwiązań mają swoje wady i zalety. W tradycyjnej wirtualizacji mamy do dyspozycji w pełni izolowaną i bezpieczną maszynę wirtualną (jednak jej wydajność może pozostawiać wiele do życzenia). W przypadku Dockera mamy do czynienia z kontenerami pozbawionymi kluczowych cech( np. izolacji), ale za to bardzo wydajnymi i szybkimi oraz dającymi możliwość szybszego wdrożenia w środowisku docelowym. Użycie jednego z  tych rozwiązań zależy w dużej mierze od indywidualnych potrzeb.

To top