Dlaczego Docker to nie “lekka” maszyna wirtualna?

Docker

Dlaczego Docker to nie “lekka” maszyna wirtualna? Różnice pomiędzy kontenerami a VMs

17/05/2016
Podziel się

Członkowie społeczności Docker często zadają pytanie: czy Docker to maszyna wirtualna? Niestety, wiele osób postrzega kontenery Dockera tylko jako lekkie maszyny wirtualne. Nietrudno o błąd, bo obie technologie posiadają wiele cech wspólnych. My skupimy się na dwóch najważniejszych:

  • zostały zaprojektowane w celu stworzenia izolowanego środowiska, w którym można uruchomić aplikację
  • środowisko to jest traktowane jak przenośny artefakt binarny (przenośny zbiór plików oraz metadane kontenera)

Mimo występujących podobieństw, architektura tych dwóch rozwiązań jest zasadniczo różna. Według inżynierów to tak jakby porównywać dom mieszkalny (VMs) z pokojem hotelowym (kontenery).

Dom spełnia funkcję ochrony przed niepożądanymi gośćmi. Typową jego cechą jest samowystarczalność: ma własną infrastrukturę, kanalizację, ogrzewanie, elektryczność itd. Pokoje hotelowe (kontenery), spełniają tą samą funkcję, dają nam schronienie. Za każdym razem kiedy zaistnieje taka potrzeba otrzymujesz jeden pokój (kontener) skonfigurowany tak, jak w danej chwili tego potrzebujesz np: dwa łóżka / jedno łóżko? Nie ma problemu.

W kontenerach, jeżeli potrzebujesz dodatkowej zmiennej środowiskowej, dodatkowego pakietu oprogramowania czy skryptu, dodajesz go. Rozpoczynasz od budowy obrazu, który odzwierciedla środowisko odpowiednie dla Twojej aplikacji (robisz to korzystając z zasobów Docker). Tak, po prostu zaczynasz od bazowego obrazu systemu operacyjnego (np. centos, ubuntu, alpine), a docker buduje obraz tworząc kolejne warstwy systemu plików przykrywające lub dodające dodatkowe pliki do bazowego obrazu. Maszyny wirtualne są zbudowane w oparciu o inne rozwiązanie. Rozpoczynasz pracę z pełnym systemem operacyjnym i w razie potrzeby wyrzucasz rzeczy, które nie są potrzebne do działania Twojej aplikacji.

Dodatkowym problemem, jest myślenie o konteneryzacji z perspektywy maszyn wirtualnych, pomimo rozróżniania podstawowych różnic. Czy zadajecie sobie często pytania:

  • Jak wykonać kopię zapasową kontenera?
  • Jaka jest polityka zarządzania w wypadku wystąpienia błędów na uruchomionym kontenerze?
  • Gdzie jest uruchomiony serwer aplikacji?

Błąd! Musimy pamiętać, że Docker nie jest technologią wirtualizacji, ale technologią dostarczania aplikacji. Monolityczna maszyna wirtualna przechowuje kod aplikacji, ale bardzo często również jej dane stanowe, krótko mówiąc wykorzystuje wszystko to, co zawiera serwer fizyczny i pakuje w zestaw plików binarnych, ułatwiając przenoszenie. W Dockerze warstwę abstrakcji tworzy aplikacja, a dokładniej procesy, dzięki której tworzymy aplikację.

Pamiętaj o tym, że Twoje dane nie znajdują się w kontenerze, ale w nazwanym woluminie, który można współdzielić z innymi kontenerami. Dlatego też, nie ma możliwości wykonania kopii zapasowej kontenera. Wykonujesz kopię zapasową danych woluminu i zapominasz o kontenerze.

Aby naprawić błędy powinieneś zaktualizować obraz Dockera, zatrzymać uruchomione kontenery i uruchomić nowe. Kontener może być uruchomiony w ułamku sekundy, więc jest to dużo bardziej korzystne rozwiązanie, niż w przypadku maszyn wirtualnych.

Kiedy rozważasz, w jaki sposób Twoja organizacja może wykorzystywać kontenery Docker, powinieneś wyzbyć się myślenia zorientowanego na maszyny wirtualne i uświadomić sobie, że Docker to znacznie więcej niż “lekka” maszyna wirtualna. To zorientowany na aplikację sposób dostarczania skalowalnych aplikacji, na wybranej infrastrukturze.

Zobacz również

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

    Skontaktuj się z nami