Często pojawiającym się pytaniem w kontekście Dockera jest rozróżnienie między nim a maszyną wirtualną (VM).
W infrastrukturze chmurowej maszyny wirtualne są standardowym rozwiązaniem, oferującym wiele korzyści. Jednakże, warto zastanowić się nad alternatywą, która byłaby bardziej oszczędna, skalowalna i lekka. Takim właśnie rozwiązaniem jest Docker.
Docker to technologia oparta na kontenerach, która umożliwia tworzenie aplikacji o rozproszonej architekturze. W niniejszym artykule omówimy główne różnice pomiędzy maszynami wirtualnymi a kontenerami Dockera.
Czym jest maszyna wirtualna?
Maszyna wirtualna to system, który symuluje działanie fizycznego komputera.
Upraszczając, umożliwia ona uruchomienie wielu wirtualnych komputerów na jednym, fizycznym urządzeniu. Każda maszyna wirtualna potrzebuje własnego systemu operacyjnego, a zasoby sprzętowe są wirtualizowane.
Czym jest Docker?
Docker to narzędzie, które za pomocą kontenerów znacząco upraszcza proces tworzenia, wdrażania i uruchamiania aplikacji. Aplikacja wraz z jej zależnościami zostaje umieszczona wewnątrz kontenera.
Nauka Dockera jest łatwa!
Porównanie Dockera z maszyną wirtualną
Teraz przyjrzymy się kluczowym różnicom między kontenerami Dockera a maszynami wirtualnymi. Główne aspekty to obsługa systemu operacyjnego, bezpieczeństwo, mobilność i wydajność.
Przeanalizujmy każdy z tych aspektów krok po kroku.
Obsługa systemu operacyjnego
Sposób obsługi systemu operacyjnego w przypadku maszyny wirtualnej i kontenera Docker różni się zasadniczo. Jak widać na ilustracji, każda maszyna wirtualna posiada własny system operacyjny gościa, umieszczony nad systemem operacyjnym hosta, co sprawia, że maszyny wirtualne są „ciężkie”. Natomiast kontenery Docker współdzielą system operacyjny hosta, co czyni je znacznie lżejszymi.
Współdzielenie systemu operacyjnego hosta przez kontenery sprawia, że uruchamiają się one w ciągu kilku sekund i są bardzo „lekkie”. W związku z tym, koszty zarządzania systemem kontenerowym są znacznie niższe niż w przypadku maszyn wirtualnych.
Kontenery Docker są idealne do sytuacji, w których chcemy uruchamiać wiele aplikacji na jednym jądrze systemu operacyjnego. Jeżeli jednak aplikacje lub serwery wymagają działania w różnych wersjach systemu operacyjnego, konieczne jest zastosowanie maszyn wirtualnych.
Bezpieczeństwo
Maszyna wirtualna nie udostępnia systemu operacyjnego, a jądro hosta ma silną izolację. To sprawia, że maszyny wirtualne są bezpieczniejsze w porównaniu z kontenerami. Kontenery, z racji współdzielonego jądra hosta, są narażone na większą ilość zagrożeń bezpieczeństwa i luk.
Dodatkowo, ponieważ zasoby Dockera są współdzielone, a nie izolowane w przestrzeni nazw, ewentualny atakujący, uzyskawszy dostęp do jednego kontenera, może potencjalnie wykorzystać wszystkie kontenery w klastrze. W przypadku maszyny wirtualnej bezpośredni dostęp do zasobów jest niemożliwy, a hipernadzorca kontroluje ich wykorzystanie.
Mobilność
Kontenery Dockera cechują się dużą mobilnością, ponieważ nie posiadają oddzielnych systemów operacyjnych. Kontener można łatwo przenieść do innego systemu operacyjnego i natychmiast uruchomić. Z drugiej strony, maszyny wirtualne, posiadając osobne systemy operacyjne, są znacznie trudniejsze do przeniesienia, a sam proces ze względu na ich rozmiar jest czasochłonny.
Do celów programistycznych, gdzie aplikacje muszą być rozwijane i testowane na różnych platformach, kontenery Dockera stanowią idealny wybór.
Wydajność
Bezpośrednie porównywanie wydajności maszyn wirtualnych i kontenerów Dockera nie jest w pełni adekwatne, ponieważ służą one różnym celom. Niemniej jednak, lekka architektura Dockera i jego mniejsze zapotrzebowanie na zasoby sprawiają, że jest on często lepszym rozwiązaniem niż maszyna wirtualna. Kontenery uruchamiają się znacznie szybciej niż maszyny wirtualne, a zużycie zasobów zmienia się w zależności od obciążenia.
W przeciwieństwie do maszyn wirtualnych, kontenery nie wymagają stałego przydzielania zasobów. Skalowanie i duplikowanie kontenerów jest również łatwiejsze niż w przypadku maszyn wirtualnych, ponieważ nie ma potrzeby instalowania w nich systemów operacyjnych.
Podsumowanie
Poniższa tabela prezentuje podsumowanie różnic między maszynami wirtualnymi a kontenerami Docker:
Maszyna wirtualna
Kontener Dockera
Izolacja procesów na poziomie sprzętowym
Izolacja procesów na poziomie systemu operacyjnego
Każda maszyna wirtualna ma własny system operacyjny
Kontenery mogą współdzielić system operacyjny
Uruchamianie trwa kilka minut
Uruchamianie trwa kilka sekund
Rozmiar maszyn wirtualnych to kilka GB
Kontenery są „lekkie” (KB/MB)
Trudno znaleźć gotowe maszyny wirtualne
Łatwy dostęp do gotowych kontenerów Docker
Maszyny wirtualne można przenosić
Kontenery są niszczone i tworzone ponownie, a nie przenoszone
Tworzenie maszyny wirtualnej zajmuje więcej czasu
Kontenery można utworzyć w kilka sekund
Większe zużycie zasobów
Mniejsze zużycie zasobów
Czy artykuł okazał się dla Ciebie pomocny? Zachęcamy do podzielenia się nim!