Close

Kontenery a maszyny wirtualne

Poznaj różnice między kontenerami a maszynami wirtualnymi, jak również najpopularniejszych dostawców każdego z tych rozwiązań, oraz dowiedz się, jak tych ostatnich można używać razem

Ian Buchanan — zdjęcie
Ian Buchanan

Główny inżynier ds. rozwiązań


Kontenery i maszyny wirtualne są bardzo podobnymi technologiami wirtualizacji zasobów. Wirtualizacja to proces, w którym pojedynczy zasób, jak np. pamięć RAM, procesor, dysk czy urządzenie sieciowe, zostaje „zwirtualizowany” i przedstawiony jako wiele zasobów. Kluczową różnicą pomiędzy kontenerami a maszynami wirtualnymi jest to, że te ostatnie wirtualizują całą maszynę wraz ze sprzętem, zaś kontenery wirtualizują jedynie warstwy oprogramowania powyżej poziomu systemu operacyjnego.

Kontener pokazujący różnice między maszynami wirtualnymi a kontenerami.
Logo Compass.

Wypróbuj Compass bezpłatnie

Ulepsz środowisko programistyczne, skataloguj wszystkie usługi i popraw kondycję oprogramowania.

Czym jest kontener?


Kontenery to lekkie pakiety oprogramowania, które zawierają wszystkie zależności wymagane do wykonania zawartej aplikacji. Zależności te obejmują takie elementy, jak biblioteki systemowe, zewnętrzne pakiety kodu innych firm czy inne aplikacje na poziomie systemu operacyjnego. Zależności zawarte w kontenerze istnieją na poziomach stosu powyżej systemu operacyjnego.

Zalety

  • Szybkość iteracji
    Ponieważ kontenery są lekkie i zawierają tylko oprogramowanie wysokiego poziomu, umożliwiają bardzo szybką modyfikację i iterację.
  • Solidny ekosystem
    Większość systemów uruchomieniowych kontenerów oferuje hostowane publiczne repozytorium gotowych kontenerów. Te repozytoria kontenerów zawierają wiele popularnych aplikacji, takich jak bazy danych lub systemy przesyłania wiadomości, które mogą zostać natychmiast pobrane i wykonane, co stanowi istotną oszczędność czasu

Wady

  • Wspólne ryzyko
    Kontenery współdzielą ten sam sprzęt poniżej warstwy systemu operacyjnego, w związku z czym niepożądany dostęp do jednego kontenera może stanowić zagrożenie dla całej maszyny hosta. Najpopularniejsze środowiska uruchomieniowe kontenerów zawierają publiczne repozytoria gotowych kontenerów. Korzystanie z tych publicznych obrazów wiąże się z pewnym ryzykiem, ponieważ mogą one zawierać luki w zabezpieczeniach lub mogą być podatne na przejęcie przez niepowołane osoby.

Popularni dostawcy kontenerów


ikona kompilacji kodu
materiały pokrewne

Porównanie platform Kubernetes i Docker

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Ulepsz swoje środowisko programistyczne dzięki narzędziu Compass

  • Docker
    Docker to najpopularniejsze i szeroko stosowane środowisko uruchomieniowe dla kontenerów. Docker Hub to gigantyczne publiczne repozytorium popularnych aplikacji kontenerowych. Kontenery w Docker Hub mogą być natychmiast pobierane i wdrażane w ramach lokalnego środowiska uruchomieniowego Docker.
  • RKT
    RKT (czyt. „rocket”) to system kontenerów skoncentrowany na bezpieczeństwie. Kontenery RKT nie pozwalają na korzystanie z niezabezpieczonych funkcji kontenera, chyba że użytkownik celowo je włączy. Kontenery RKT mają na celu rozwiązanie podstawowych problemów związanych z bezpieczeństwem, które dotykają inne systemy uruchomieniowe kontenerów.
  • Linux Containers (LXC)
    Projekt Linux Containers to system uruchomieniowy kontenerów Linux typu open source. LXC służy do wyodrębniania procesów operacyjnych na poziomie systemu. Docker w rzeczywistości korzysta właśnie z technologii LXC. Linux Containers ma na celu zaoferowanie neutralnego środowiska uruchomieniowego open source dla kontenerów.
  • CRI-O
    CRI-O to implementacja interfejsu Kubernetes Container Runtime Interface (CRI), która umożliwia korzystanie ze środowisk uruchomieniowych zgodnych z Open Container Initiative (OCI). Jest to mało wymagająca alternatywa dla Dockera jako środowiska uruchomieniowego dla Kubernetes.

Czym jest maszyna wirtualna?


Maszyny wirtualne to rozbudowane pakiety oprogramowania, które zapewniają pełną emulację sprzętu niskiego poziomu, takiego jak procesor, dysk czy urządzenia sieciowe. Maszyny wirtualne mogą również zawierać uzupełniający stos oprogramowania do uruchomienia na emulowanym sprzęcie. Połączenie pakietów sprzętu i oprogramowania zapewnia w pełni funkcjonalne odwzorowanie systemu obliczeniowego.

Zalety

  • Pełna izolacja
    Maszyny wirtualne funkcjonują jako całkowicie niezależne systemy. Oznacza to, że maszyny wirtualne są wolne od luk i ingerencji ze strony innych maszyn wirtualnych na wspólnym hoście. Pojedyncza maszyna wirtualna może nadal zostać zaatakowana za sprawą danej luki, nie będzie jednak to miało wpływu na sąsiednie maszyny wirtualne w ramach tego samego hosta.
  • Interaktywny rozwój
    Kontenery są zazwyczaj statycznymi definicjami oczekiwanych zależności i konfiguracji potrzebnych do uruchomienia kontenera. Maszyny wirtualne są bardziej dynamiczne i mogą być interaktywnie rozwijane. Po określeniu podstawowych parametrów sprzętowych dla maszyny wirtualnej, ta może być traktowana jak podstawowy zestaw komputerowy. Na maszynie wirtualnej można ręcznie instalować oprogramowanie i wykonywać migawki w celu uchwycenia bieżącego stanu konfiguracji. Migawki maszyny wirtualnej mogą zostać użyte do przywrócenia jej stanu do danego punktu w czasie lub uruchomienia dodatkowych maszyn wirtualnych na podstawie danej konfiguracji.

Wady

  • Prędkość iteracji
    Budowa i regeneracja maszyn wirtualnych jest czasochłonna, ponieważ obejmują pełen stos oprogramowania. Wszelkie modyfikacje migawek maszyn wirtualnych mogą wymagać sporo czasu na regenerację i sprawdzenie, czy zachowują się zgodnie z oczekiwaniami.
  • Koszt pamięci masowej
    Maszyny wirtualne mogą zajmować dużo miejsca na dysku. Mogą szybko urosnąć do rozmiaru kilku gigabajtów. To może prowadzić do problemów z brakiem miejsca na sprzęcie hosta.

Popularni dostawcy maszyn wirtualnych

  • Virtualbox
    Virtualbox to bezpłatny, otwarty system emulacji architektury x86 należący do Oracle. Stanowi jedną z najpopularniejszych i najbardziej znanych platform maszyn wirtualnych z ekosystemem dodatkowych narzędzi ułatwiających tworzenie i udostępnianie obrazów maszyn wirtualnych.
  • VMware
    VMware jest spółką notowaną na giełdzie, która oparła swoją działalność na jednej z pierwszych technologii wirtualizacji sprzętu x86. VMware uwzględnia usługę hipernadzorcy, która umożliwia wdrażanie i zarządzanie wieloma maszynami wirtualnymi. VMware odznacza się rozbudowanym interfejsem do zarządzania maszynami wirtualnymi. VMware to znakomita opcja maszyn wirtualnych klasy korporacyjnej.
  • QEMU
    QEMU to najsolidniejsza opcja wirtualnej maszyny emulującej sprzęt. Obsługuje każdą powszechną architekturę sprzętową. QEMU jest narzędziem opartym na samym wierszu poleceń i nie oferuje graficznego interfejsu użytkownika do konfiguracji czy obsługi. To sprawia, że QEMU jest jedną z najszybciej działających maszyn wirtualnych.

Która opcja jest dla Ciebie najlepsza?


Jeśli masz konkretne wymagania sprzętowe do spełnienia, lub tworzysz na jednej platformie sprzętowej, a potrzebujesz ukierunkować się na inną (np. z Windows na MacOS), użycie maszyny wirtualnej będzie koniecznością. Większość pozostałych wymagań dotyczących samego oprogramowania można spełnić za pomocą kontenerów.

Jak używać kontenerów i maszyn wirtualnych razem?


Używanie kontenerów w połączeniu z maszynami wirtualnymi jest całkowicie możliwe, aczkolwiek zastosowania są ograniczone. Można utworzyć maszynę wirtualną emulującą unikalną konfigurację sprzętową, a następnie na niej zainstalować dany system operacyjny. Po uruchomieniu maszyny wirtualnej i załadowaniu systemu operacyjnego można ustanowić środowisko uruchomieniowe kontenera. Od tego momentu dysponujemy funkcjonalnym systemem obliczeniowym z emulowanym sprzętem, na którym możemy instalować kontenery.

Jednym z praktycznych zastosowań tej konfiguracji jest eksperymentowanie z wdrażaniem systemów na czipach (SoC). Popularne urządzenia obliczeniowe typu SoC, takie jak Raspberry Pi czy płytki rozwojowe BeagleBone mogą być emulowane jako maszyna wirtualna w celu dokonania prób z uruchamianiem kontenerów do testów na rzeczywistym sprzęcie.

Jednakże w większości przypadków postawienie na jedno tylko rozwiązanie z powyższych również zaspokoi wszelkie nasze potrzeby. Kluczem do wyboru między kontenerami a maszyną wirtualną jest zrozumienie naszych potrzeb w zakresie zasobów, jak i wyrzeczeń, na które jesteśmy gotowi.

Ian Buchanan
Ian Buchanan

Ian ma szerokie i bogate doświadczenie zarówno w Javie jak i .NET, ale najbardziej znany jest jako mistrz metodyki Agile w dużych przedsiębiorstwach. Obecnie skupia się na rozwijającej się kulturze DevOps i narzędziach umożliwiających lepszą ciągłą integrację, dostarczanie i analizę danych. W trakcie swojej kariery z powodzeniem zarządzał narzędziami do tworzenia oprogramowania dla przedsiębiorstw we wszystkich fazach ich cyklu życia. Udało mu się doprowadzić do usprawnienia procesów w całej organizacji, czego efektem jest większa produktywność, wyższa jakość i większe zadowolenie klientów. Tworzył wielonarodowe zespoły, które cenią sobie samorozwój i samodzielną organizację. Kiedy nie wygłasza prelekcji ani nie programuje, Ian oddaje się swoim pasjom związanym z parserami, metaprogramowaniem i językami dziedzinowymi. Obserwuj Iana: @devpartisan.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up