Kontenery a maszyny wirtualne: wyjaśnianie różnic [2023]

Dopiero zaczynasz korzystać z narzędzi do wizualizacji? Albo włamać się do dyskusji technologicznej na kontenerach i maszynach wirtualnych.

Wirtualizacja obejmuje proces, w którym pojedyncze zasoby, takie jak pamięć RAM, procesor, sieć i dyski, można „zwirtualizować” i traktować jako wiele zasobów. Kluczowa różnica polega na tym, że kontenery mogą wirtualizować tylko warstwy oprogramowania zbudowane powyżej poziomu systemu operacyjnego. Natomiast maszyny wirtualne mogą wirtualizować całe maszyny do warstw sprzętowych.

Chociaż istnieje wyraźne rozróżnienie, istnieje lista podobieństw między kontenerami a maszynami wirtualnymi, w tym sposób, w jaki poprawiają wydajność IT, przenośność do aplikacji, ulepszają DevOps i cykl życia oprogramowania (SDLC). Więcej na ten temat później.

W tym poście omówiono kontenery i maszyny wirtualne, omówiono zalety obu tych rozwiązań i zakończono uwagą dotyczącą wyboru odpowiedniego narzędzia w zależności od potrzeb. Zakłada się również, że masz niezbędną wiedzę na temat kontenerów i maszyn wirtualnych. Jeśli nie, nadal jest to doskonałe miejsce do rozpoczęcia.

Historia wirtualizacji

Przed rozpowszechnieniem kontenerów maszyny wirtualne były jedynym rozwiązaniem służącym do izolowania środowisk w infrastrukturze fizycznej. Ale dopiero w 2013 roku Docker wydał swoje pierwsze oprogramowanie do konteneryzacji.

Od tego czasu być może zauważyłeś ogromne zainteresowanie kontenerami i tym, jak kształtują one krajobraz przetwarzania w chmurze.

Wielu programistów zyskało większe zainteresowanie, szczególnie korzyściami płynącymi ze zwinnego programowania oferowanego przez kontenery. Należy jednak pamiętać, że kontenery i maszyny wirtualne są budowane w oparciu o optymalizację zasobów w istniejącej infrastrukturze fizycznej.

Jak działa wirtualizacja

Wirtualizacja polega na użyciu oprogramowania do stworzenia warstwy abstrakcji na sprzęcie komputerowym, co pozwala na podzielenie elementów sprzętowych, zwłaszcza z jednego komputera, na wiele komputerów. Takie oprogramowanie nazywa się hypervisorem.

Hypervisor umożliwia równoczesne działanie różnych systemów operacyjnych, współdzieląc wspólne fizyczne zasoby obliczeniowe. W przypadku użycia na komputerach fizycznych lub serwerach w centrach danych umożliwi komputerom fizycznym oddzielenie komputerowych systemów operacyjnych (OS) i aplikacji od sprzętu. Następnie może podzielić się na wiele „maszyn wirtualnych”.

Co to jest kontener?

źródło: docker.com

Kontenery to lekka, zwinna metoda obsługi wirtualizacji. A ponieważ nie potrzebują hiperwizorów, uprawniają do szybszego udostępniania zasobów i szybkiego udostępniania nowych aplikacji.

Kontenery można również wyświetlać jako pakiety oprogramowania zawierające zależności wymagane do wykonania zarządzanej aplikacji.

Zależności obejmują biblioteki systemowe, zewnętrzne (zewnętrzne) pakiety kodu oraz włączenie wszystkich innych aplikacji na poziomie systemu operacyjnego. Wszystkie zależności zawarte w kontenerze istnieją na poziomach stosu wyższych niż systemy operacyjne.

Plusy 👍

  • Szybkość iteracji – Kontenery są lekkie i zawierają tylko oprogramowanie wysokiego poziomu; można je łatwo regulować i można je szybko iterować. Kontenery oferują również szybkie dostarczanie oprogramowania dzięki programowaniu opartemu na testach i dostępności wdrażania.
  • Solidny ekosystem — w większości przypadków systemy środowiska uruchomieniowego kontenerów zapewniają już hostowane publiczne repozytorium gotowych kontenerów. Repozytorium zawiera różne popularne aplikacje, takie jak bazy danych i systemy przesyłania wiadomości, które można pobrać i wdrożyć, skracając czas pracy zespołów programistycznych.
  • Skalowanie — kontenery są preferowane ze względu na ich zdolność do obsługi dużych obciążeń i ruchu. Eksperci ds. technologii informatycznych (IT) mogą używać kontenerów do zarządzania infrastrukturą chmurową i zapewniania jej w sposób oszczędny pod względem zasobów i ułatwiający elastyczne użytkowanie.
  • Mikrousługi — kontenery są idealne, jeśli chcesz wdrożyć wiele mikrousług. Mikrousługi obejmują mniejsze komponenty, które są częścią podstawowej aplikacji lub oprogramowania. Gdy pakujesz każdą mikrousługę jako kontener, masz prawo do bezproblemowego wdrażania, skalowania i zarządzania.
  • Wady 👎

  • Exploity współdzielonego hosta — ponieważ kontenery współużytkują wspólny podstawowy system sprzętowy zbudowany poniżej warstwy systemu operacyjnego, istnieje możliwość, że exploit w jednym kontenerze może się zepsuć i rozprzestrzenić, wpływając na bazowy sprzęt. Ponadto fakt, że większość kontenerów ma publiczne repozytoria gotowych kontenerów, wprowadza zagrożenie bezpieczeństwa. Ryzyko jest realizowane w przypadkach, gdy naruszony lub wykorzystany wizerunek publiczny działa jako luka w zabezpieczeniach stwarzająca ryzyko ataków cybernetycznych.
  • Obsługuje tylko jeden system operacyjny – jeśli korzystasz tylko z jednego systemu operacyjnego, kontenery umożliwiają uruchamianie wcześniejszych wersji, co jest dobrą rzeczą. Jednak kontenery nie są najlepszą opcją, jeśli celujesz w różne systemy operacyjne.
  • Oto kilku znanych dostawców kontenerów:

  • Docker – Docker to najszerzej stosowane na świecie rozwiązanie kontenerowe. Docker Hub to duże repozytorium najpopularniejszych aplikacji kontenerowych. Możesz pobrać kontenery z Docker Hub i wdrożyć lokalne środowisko wykonawcze Docker.
  • Linux Containers (LXC) — projekt Linux Containers stoi za środowiskiem uruchomieniowym kontenera typu open source dla systemu Linux. LXC izoluje procesy systemu operacyjnego od siebie. Jeśli zagłębisz się w Dockera, odkryjesz, że Docker używa LXC w swojej podstawowej architekturze.
  • Co to jest maszyna wirtualna?

    źródło: docker.com

    Z drugiej strony maszyny wirtualne (VM) to duże (ciężkie) pakiety oprogramowania zapewniające pełną emulację niskopoziomowego sprzętu sprzętowego, takiego jak jednostka centralna (CPU), dysk i urządzenia sieciowe.

    Maszyny wirtualne umożliwiają uruchamianie wielu maszyn w różnych systemach operacyjnych, ale wciąż na jednym komputerze. Jak wspomniano wcześniej, hiperwizory to sposób interakcji maszyn wirtualnych z komputerami fizycznymi. Hypervisory oddzielają maszyny wirtualne od siebie i przydzielają między nie zasoby, takie jak pamięć i procesory.

    Plusy 👍

  • Pełne bezpieczeństwo izolacji — maszyny wirtualne działają w izolacji jako w pełni autonomiczne systemy, odporne na luki w zabezpieczeniach i zakłócenia powodowane przez inne maszyny wirtualne. Jeśli atak zostanie przeprowadzony na pojedynczą maszynę wirtualną, jest ona izolowana, co uniemożliwia zainfekowanie sąsiednich maszyn wirtualnych.
  • Programowanie interaktywne — często kontenery to statyczne definicje oczekiwanych zależności i konfiguracji potrzebnych do uruchomienia kontenera. Maszyny wirtualne są dynamiczne, co pozwala na interaktywny rozwój. Po określeniu potrzeb sprzętowych rozważ maszynę wirtualną jako komputer bez kości. Możesz ręcznie zainstalować oprogramowanie i użyć maszyny wirtualnej do przechwycenia konfiguracji bieżącego stanu. Migawki maszyny wirtualnej mogą służyć jako kontrola wersji iw razie potrzeby do przywrócenia maszyny wirtualnej do określonego czasu oprogramowania lub uruchomienia dodatkowych maszyn z wymaganą konfiguracją.
  • Wady 👎

  • Szybkość iteracji — maszyny wirtualne to oprogramowanie z pełnym stosem, a zatem ich zbudowanie wymaga czasu. Modyfikacje w migawce maszyny wirtualnej mogą zająć trochę czasu, aby iterować i sprawdzać, czy ostatnie aktualizacje działają zgodnie z oczekiwaniami.
  • Koszt rozmiaru pamięci masowej — biorąc pod uwagę fakt, że maszyny wirtualne są ponownie oprogramowaniem z pełnym stosem, prawdopodobnie oczekujesz, że będą one znaczące. Tak, zajmują dużo miejsca i szybko rosną do gigabajtów. Efektem jest brak miejsca na maszynie hostującej maszyny wirtualne.
  • Oto kilku popularnych dostawców maszyn wirtualnych:

  • Virtualbox – Virtualbox to jedna z najbardziej uznanych platform maszyn wirtualnych. Ekosystem Virtualbox posiada dodatkowe narzędzia do tworzenia i dystrybucji obrazów maszyn wirtualnych. Jest to darmowy system emulacji architektury o otwartym kodzie źródłowym, którego właścicielem jest Oracle.
  • VMware – VMware jest zbudowane na architekturze x86 i jest spółką notowaną na giełdzie. To rozwiązanie jest dostarczane z hiperwizorem do wdrażania maszyn wirtualnych i zarządzania nimi. Jest preferowany ze względu na solidny interfejs użytkownika (UI) do zarządzania maszynami wirtualnymi oraz wydajne narzędzie korporacyjne oferujące funkcje wsparcia.
  • Kontenery a maszyny wirtualne

    Chociaż maszyny wirtualne istnieją od tak dawna, są zastępowane przez kontenery do podobnych celów. Widziałeś zalety i wady obu stosów technologii. Oto podstawowe różnice.

    FeatureContainers Virtual MachinesDuże i mniej przenośne w oparciu o każdą maszynę wirtualną posiadającą własny system operacyjny. Maszyny wirtualne zajmują dużą przestrzeń mierzoną w gigabajtach.
    Maszyny wirtualne nie są przenośne. Nie mają własnego systemu operacyjnego. Mają własne systemy operacyjne i dzięki temu wykonują dodatkowe zadania, w tym; uruchamianie programów niekompatybilnych z systemem operacyjnym hosta, wiele programów w różnych systemach operacyjnych oraz uruchamianie aplikacji, które nie mogą współdzielić zasobów i funkcji systemu operacyjnego.Rozmiar i przenośnośćMałe i przenośne ze względu na współdzielenie systemu operacyjnego. Kontenery zajmują miejsce mierzone w megabajtach.
    Kontenery można przenosić między różnymi komputerami. Kontenery działają szybciej niż maszyny wirtualne ze względu na już działający system operacyjny. Uruchomienie zajmuje kilka sekund. Szybko uruchamiające się maszyny wirtualne są powolne, ponieważ muszą najpierw uruchomić własne systemy operacyjne. Uruchomienie zajmuje kilka minut. Cena maszyn wirtualnych jest relatywnie wyższa — duże zapotrzebowanie na zasoby i poziomy złożoności oraz wysoki koszt. Dostęp do zasobów Kontenery mają dostęp do wszystkich zasobów na maszynie hosta. Maszyny wirtualne wykorzystują przydzielone im określone zasoby przez hiperwizora. Bezpieczeństwo Mniej bezpieczne. Kontenery działające na współdzielonym oprogramowaniu operacyjnym hosta są podatne na ataki w przypadku naruszenia bezpieczeństwa systemu operacyjnego hosta. Złożone wdrożenie; poziom złożoności maszyn wirtualnych wskazuje, że potrzebują one więcej czasu na rozwój. Wdrożenie nie jest inne.WdrażanieŁatwe wdrażanie; wynika to z jego natury, „samowystarczalności” i niewielkiej łatwości wdrażania, przenoszenia lub aktualizacji. Cena maszyn wirtualnych jest stosunkowo wyższa. Wysokie zapotrzebowanie na zasoby i poziomy złożoności, wraz z nim, to wysoki koszt. KosztCena kontenerów jest stosunkowo niższa, ponieważ wymagania są mniejsze niż w przypadku maszyn wirtualnych. Cena maszyn wirtualnych jest stosunkowo wyższa — duże zapotrzebowanie na zasoby i złożoność poziomy, wraz z wysokimi kosztami.

    Jak jednocześnie korzystać z kontenerów i maszyn wirtualnych

    Jeśli zastanawiasz się, czy możliwe jest jednoczesne korzystanie z kontenerów i maszyn wirtualnych, odpowiedź brzmi: tak. Chociaż praktyczne przypadki są ograniczone. Możesz utworzyć maszynę wirtualną, aby emulować określone konfiguracje sprzętowe i zainstalować system operacyjny.

    Gdy Twoja maszyna wirtualna uruchomi system operacyjny i będzie w pełni funkcjonalna, będziesz teraz wyposażony w emulowany system obliczeniowy z określonym sprzętem, na którym możesz zainstalować kontenery.

    Dobrym przykładem ilustrującym tę konfigurację jest eksperymentowanie z systemem wdrażania chipów. Niektóre popularne metody dla wbudowanych urządzeń obliczeniowych, takie jak płyty rozwojowe BeagleBone i Raspberry Pi, można emulować jako maszyny wirtualne w celu eksperymentowania z działającymi (uruchomionymi) kontenerami przed testowaniem na rzeczywistym sprzęcie.

    Kolejną zaletą korzystania z unii kontenerów i maszyn wirtualnych jest zwiększenie bezpieczeństwa. Na przykład możesz wdrażać kontenery na maszynach wirtualnych. Rozważ przykład, w którym dziesięć kontenerów jest wdrożonych na jednym komputerze, aby zademonstrować, jak jest to pomocne.

    Jeśli komputer zostanie przejęty, istnieje ryzyko wpływu na dziesięć kontenerów. Rozwiązanie uzyskuje się poprzez dystrybucję dziesięciu kontenerów na dziesięć maszyn wirtualnych. Jeśli jedna maszyna wirtualna zostanie naruszona, inne części aplikacji systemowej zwykle nadal działają.

    Ostatnie słowa

    Jeśli masz dokładne specyfikacje sprzętowe dla swojego projektu lub pracujesz na jednym sprzęcie, a wciąż celujesz w inny, jak Windows czy MacOS, najlepiej byłoby użyć maszyn wirtualnych. W innych przypadkach, gdy wymagania dotyczą „tylko oprogramowania”, najlepszym rozwiązaniem byłoby użycie kontenerów.

    W większości przypadków twoje potrzeby zostaną zaspokojone przez któryś z twoich wyborów. Aby wybrać najlepszy, zrozum swoje potrzeby w zakresie zasobów i związane z nimi kompromisy. Właściwe narzędzie będzie zatem zależeć od Twojego projektu.

    Jeśli potrzebujesz szybkiego i wydajnego wdrożenia, najlepszym wyborem są kontenery. Jeśli Twoja organizacja musi zwirtualizować cały system operacyjny na sprzęcie, maszyny wirtualne są najlepsze. A jeśli chcesz zmaksymalizować bezpieczeństwo, połączenie obu byłoby najlepsze; wiąże się to jednak z kosztami.

    Wreszcie, zarówno kontenery, jak i maszyny wirtualne są prawidłowymi rozwiązaniami. Decydującym czynnikiem przewodnim powinny być jednak Twoje specyfikacje. Jeśli nadal potrzebujesz więcej wskazówek i dogłębnego zrozumienia, sugerowałbym przejście do Docker vs. maszyna wirtualna.