Docker vs Vagrant

Docker vs Vagrant

Zespoły rozwoju i operacji od samego początku mają do czynienia ze złożonością środowisk oprogramowania. To powszechny problem, w którym kod roboczy w jednym środowisku nie działa w innym. Zarówno Docker, jak i Vagrant Help tworzą przewidywalne i powtarzalne środowiska programistyczne. Jednak Docker używa technologii kontenerów, podczas gdy Vagrant używa maszyn wirtualnych do osiągnięcia tego celu. Zrozumienie mocnych i słabości Dockera i Vagrant pomoże programistom mieszać i dopasować te narzędzia w celu osiągnięcia pożądanych wyników. Najpierw zacznijmy od podstawowych technologii.

Wirtualne maszyny

Maszyna wirtualna (VM) emuluje komputer fizyczny. Ma własny kompletny system operacyjny i alokacja zasobów. Maszyna hosta zapewnia niezbędne zasoby fizyczne, ale wirtualizowane środowisko działa jako niezależna maszyna z własnym BIOS, procesorem, pamięcią i adapterami sieciowymi. Mimo że VMware jest najbardziej znane z nowoczesnej technologii VM, pomysł na maszynę wirtualną istnieje od dłuższego czasu. W 1965 roku IBM Yorktown Research Center potrzebował sposobu na zmierzenie skuteczności różnych pomysłów na informatykę. Zespół badawczy chciał zmienić funkcje i mierzyć wyniki. Zespół opracował program podziału pojedynczej maszyny na mniejsze partycje. Mniejsze partycje zarządzałyby własnymi zasobami. Byłyby to małe wirtualne maszyny. Pomysł na VM zakończył się powodzeniem. IBM zaczął wytwarzać systemy operacyjne na podstawie maszyn wirtualnych. IBM System 370 (S/370) i ​​IBM System 390 (S/390), oba systemy oparte na VM/ESA IBM, stały się popularne wśród firm i uniwersytetów, ponieważ pozwoliły instytucjom umożliwić użytkownikom dzielenie się zasobami obliczeniowymi bez wpływu na środowiska. Pomysł pomógł również stworzyć system operacyjny UNIX i język programowania Java.

Nowoczesne wirtualne maszyny działają na hiperwizorach. Hiperwizory to oprogramowanie, oprogramowanie lub sprzęt odpowiedzialny za tworzenie i wykonywanie maszyn wirtualnych. Na rynku dostępnych jest wiele hiperwizorów. KVM, Red Hat Enterprise Virtualization (RHEV), Xenserver, Microsoft Hyper-V i VMware vSphere / ESXI są wybitnymi graczami. Dziś maszyny wirtualne pobudziły rozwój przetwarzania w chmurze. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean i inne firmy chmurowe w dużej mierze zależą od technologii wirtualizacji.

Pojemniki

Kontenery tworzą wirtualizację na poziomie systemu operacyjnego. Działają jako wykonywalny pakiet oprogramowania, który izoluje aplikacje z otaczającego środowiska. Wewnątrz pakietu kontener ma niezbędne właściwości, takie jak kod, czas wykonywania, biblioteki systemowe i narzędzia do oddzielenia aplikacji od wpływu zewnętrznego. Działa w systemie operacyjnym maszyny hosta. Kontenery dzielą biblioteki i pliki binarne, jeśli to możliwe i oddzielają tylko absolutnie niezbędne zasoby.

W 1979 r. To było pierwsze ziarno pomysłu pojemnika. Wczesna technologia kontenerów rozpoczęła się od więzień FreeBSD w 2000 roku. Rok później Linux Vserver pozwolił na uruchomienie wielu maszyn Linux na jednym hoście. W 2004 r. Strefy Oracle Solaris zapewniły podobną funkcjonalność jak więzienia FreeBSD. W latach 2006-2007 Google opracował kontener procesowy, a następnie połączył go z jądrem Linux. Linux Conteners (LXC) zostały utworzone w 2008 roku, aby skorzystać z Linux Cgroups i strumienia nazw. W 2013 roku Docker został stworzony poprzez połączenie pomysłów LXC. Dodał także narzędzia do łatwego budowania i pobierania obrazów pojemników.

Doker

Docker to technologia kontenera typu open source oparta na LXC. Jest popularny, ponieważ ułatwia tworzenie, uruchamianie i wdrażanie aplikacji w samodzielnym środowisku. Docker nie tworzy całego systemu operacyjnego jak maszyna wirtualna. Zamiast tego wykorzystuje jądro systemu operacyjnego hosta i tworzy wirtualizację tylko dla aplikacji i niezbędnych bibliotek. To podejście sprawia, że ​​jest znacznie bardziej lekkie niż maszyny wirtualne.

Kontenery Docker są tworzone z obrazów Docker. Obrazy dokera można traktować jako migawki maszyn. Użytkownicy mogą łatwo uruchomić pojemnik z obrazu. Obrazy są tworzone jako warstwy. Załóżmy, że zespół programistów potrzebuje pojemnika z Apache i Python zainstalowanym w określonej wersji Linux. Deweloper może pobrać obraz Linux z Docker Hub, uruchomić kontener, zainstalować Apache i Python, utworzyć nowy obraz z kontenera i udostępnić ten obraz. Inni członkowie zespołu nie muszą przejść przez tę samą instalację. Pomaga utrzymać spójne środowisko dla wszystkich.

Docker obsługuje również aplikacje skryptowe i wielokrotne. Użytkownicy mogą użyć tekstu do dokera tekstowego do zdefiniowania wymagań, a następnie zbudować kontenery za pośrednictwem Docker Compose. Powyższy przykład tworzenia serwera Apache/Python/Linux można również osiągnąć za pomocą tego procesu. Dzięki Dockerowi zespoły muszą tylko udostępnić Plik Docker, aby stworzyć to samo środowisko. Docker ma bardziej wyspecjalizowane narzędzia do złożonych zadań. Docker Swarm pomaga zorganizować na dużą skalę wdrożenia Docker.

Włóczęga

Vagrant to narzędzie open source, które pomaga tworzyć i utrzymywać maszyny wirtualne. Działa z VirtualBox, VMware, AWS i innymi dostawcami. Vagrant upraszcza zarządzanie VMS. Korzystając z VagrantFile, programiści mogą zdefiniować właściwości maszyny wirtualnej, takie jak system operacyjny, instalacje oprogramowania i inne. VagrantFile oparte na tekście można udostępniać za pomocą kontroli wersji, a niezbędne maszynę można uruchomić przy użyciu prostego polecenia, takiego jak „Vagrant Up”. Użytkownicy mogą następnie zalogować się do komputera jak serwer fizyczny.

Kiedy korzystać z Dockera lub Vagrant

Korzystanie z Docker lub Vagrant często sprowadza się do konieczności kontenerów lub maszyn wirtualnych. Oto kilka podobieństw i różnic między Dockerem a Vagrantem pod względem użytkowania. Zarówno Docker, jak i Vagrant mają łatwo konfigurowalne środowiska, które można kontrolować za pomocą skryptów. Są również przyjazne dla chmur. Vagrant Virtual Machine zapewnia rozdział bezpieczeństwa oparty na jądrze. Separacja sprawia, że ​​maszyny wirtualne są mniej ryzykowne niż pojemniki. Ale kontenery Docker są bardzo lekkie. Wykorzystują mniej zasobów i są szybkie w wykonaniu. Dzięki czemu możesz mieć o wiele więcej kontenerów na jednym hosta niż maszyny wirtualne. Ponadto, uruchamianie i zatrzymanie pojemników jest prawie natychmiastowe w porównaniu z VMS. VMS przechodzą pełny cykl rozruchu BIOS i systemu operacyjnego.

Separacja bezpieczeństwa maszyny wirtualnej sprawia, że ​​awaria VM jest bardziej samodzielna. Z drugiej strony, kontenery dzielą zasoby i mogą mieć kaskadowy efekt awarii. Ponadto zagrożenia bezpieczeństwa kontenerów mogą dotrzeć do jądra systemu operacyjnego hosta. Jednak szybkość wykonania i lekki ślad pojemników sprawiają, że Docker jest bardzo atrakcyjny dla rozwoju. Dzięki architekturze mikrousług pojemniki mogą dobrze działać, ponieważ czynniki ryzyka są łagodzone poprzez zastosowanie mikrousług. Również postępy są postępów, aby doktor był bardziej bezpieczny każdego dnia.

Z praktycznego punktu widzenia użycia, zarówno Docker, jak i Vagrant są używane tylko przez specjalistów IT i / lub programistów, nie są używane przez ogólnych konsumentów ani technologii komputerowych. W określonym włóczędze może być bardziej przydatne, gdy naprawdę chcesz naśladować cały system, podczas gdy Docker może być bardziej przydatny podczas budowania systemu testowania ciągłej integracji (CI) do często zmieniających się oprogramowania. Docker jest często używany w wdrażaniach produkcyjnych aplikacji do uruchamiania serwerów internetowych lub aplikacji, które są bezpaństwowe i łatwe do zabicia i odtwarzania na dowolnym hosta lub IP. Więc Docker jest prawdopodobnie bardziej powszechnym przypadkiem użycia.

Wniosek

Docker i Vagrant to przydatne technologie, które mogą pomóc programistom poprawić ich wydajność. Jeśli bezpieczeństwo aplikacji jest problemem, to korzystanie z Vagrant i VMS może być dobrym pomysłem. W celu szybkiego rozwoju i udostępniania Docker zapewnia przewagę. Większość zespołów używa obu do wykonania płynnej operacji.