Co to jest pojemnik?


23

Istnieje kilka pytań dotyczących kontenerów , takich jak:

Moje pytania :

  • Co to właściwie jest „kontener” (w kontekście DevOps)?
  • Dlaczego są używane?

Odpowiedzi:


18

Pierwszą rzeczą, którą należy wiedzieć o pojemniku jest:

Jest to przede wszystkim proces.

Po zrozumieniu można zacząć rozumieć, w jaki sposób kontenery są porównywane i porównywane z maszynami wirtualnymi. Zarówno kontenery, jak i maszyny wirtualne dzielą izolację od hostów. Metoda izolacji stanowi różnicę krytyczną.

Procesy kontenerowe używają rozszerzeń hosta jądra systemu operacyjnego, na którym działają, aby odizolować się od innych procesów. Inne rozszerzenia zapewniają także izolację dysku i zasobów. Kontenery współużytkują jądro i pamięć systemu operacyjnego hosta.

Maszyny wirtualne używają hiperwizora do izolowania maszyn wirtualnych od hostów. Jest to warstwa oprogramowania, która przekazuje żądania zasobów od „gości” (VM) do sprzętu. Izolację dysku zapewnia wirtualizacja dysku. Maszyny wirtualne nie współużytkują jądra z hostem - ładują własne jądra do miejsca pamięci dedykowanego maszynie wirtualnej.

Jednym z ważnych skutków tej różnicy jest to, że kontener musi być kompatybilny z jądrem ze swoim hostem. Na przykład nie można uruchomić kontenera z systemem Windows Nano Server na hoście z systemem Linux ani kontenera Ubuntu bezpośrednio na hoście z systemem Windows. Natomiast maszyny wirtualne mogą uruchamiać dowolne jądro bez względu na system operacyjny hosta. Podczas uruchamiania kontenera Linux na hoście Windows Docker uruchamia kontener na maszynie wirtualnej z systemem Linux.

Różnice operacyjne dotyczą zwinności: pojemniki uruchamiają się i zatrzymują tak szybko, jak normalny proces. Maszyny wirtualne są „cięższe”, wymagają wydzielonych dla nich dedykowanych zasobów i ich uruchomienie i zamknięcie zajmuje więcej czasu.

Kontenery oferują dużą elastyczność w modelu operacyjnym DevOps:

  • Kontenery izolują zależności komponentów oprogramowania. Programiści mogą używać kontenerów, aby zagwarantować, że moduł aplikacji będzie działał zarówno na ich komputerach programistycznych, jak w QA / UA / Production
  • Kontenery używają sieci zdefiniowanej programowo do komunikacji
  • Definicje kontenerów są deklaratywne i mogą być kontrolowane przez źródło
  • Systemy zarządzania kontenerami (Kubernetes, DC / OS, Swarm) mogą zarządzać pulami zasobów sprzętowych (obliczeniowe / RAM / pamięć masowa) i dynamicznie skalować kontenery

1
Robię również twój 3 ostatni punkt na vSphere, dzięki włóczęgi :)
Tensibai

8

Słowo kontener odnosi się do lekkiej technologii wirtualizacji dostępnej w nowoczesnych jądrach Linuksa, która jest bardzo podobna do więzień FreeBSD.

Starsze jądro Linuksa, które nie obsługuje kontenerów, może uruchamiać procesy jednocześnie. Niektóre atrybuty systemu są prywatne do przetworzenia, takie jak środowisko procesu lub pamięć procesu: tylko proces będący właścicielem tych atrybutów i sam system operacyjny mają dostęp do tych danych. (Istnieje wiele luk, takich jak niektóre implementacje ps , ale to w gruncie rzeczy prawda!) Niektóre inne atrybuty są wspólne dla procesów, na przykład system plików i interfejsy sieciowe.

Nowoczesne jądro Linuksa z obsługą kontenerów jest w stanie obsłużyć więcej atrybutów systemu jako prywatne dane powiązane z procesem lub grupą procesów. Wynikowym kontekstem jest kontener i zamiast uruchamiać program w „początkowych kontenerach” przy użyciu systemu plików i interfejsów sieciowych zainicjowanych przez system operacyjny, możliwe jest uruchamianie procesów w innych kontenerach, tak aby widzieli inny system plików i inna lista interfejsów sieciowych. Dlatego dwa procesy uruchomione w odrębnych kontenerach naprawdę współużytkują jądro. Być może znasz komendę chroot, która może uruchomić proces w odrębnej hierarchii plików, kontenery posuwają się o krok dalej.

Oczywiście jest to tylko bardzo zgrubne wytłumaczenie, ale mam nadzieję, że pomoże wyjaśnić, czym są pojemniki. Do czego są dobre?

Popularny interfejs do możliwości kontenerowych jądra Linux jest implementowany przez docker, narzędzie wiersza poleceń, które może być używane do tworzenia artefaktów reprezentujących systemy plików ( obrazy dokerów ) i uruchamiania procesów w kontenerach, w których te systemy plików są dostępne. Ten pakiet oprogramowania umożliwia także tworzenie wirtualnych systemów sieciowych ad hoc, umożliwiających komunikację kilku kontenerom w sieci prywatnej.

Technologie kontenerowe są wygodne do:

  • Opisz skalowalne złożone wdrożenia.
  • Zapewnij programistom aplikacji środowisko bardzo podobne do środowiska produkcyjnego.
  • Zaimplementuj niezmienny wzorzec serwera, ponieważ artefakty oprogramowania zazwyczaj opisują pełny system operacyjny, a nie tylko pakiet aplikacji.

(Jak się wydaje, że znasz inne technologie wirtualizacji, takie jak Virtual Box, możesz zauważyć, że technologie te mogą również wygodnie zająć się trzema powyższymi punktami. Obecnie istnieje dość małe spektrum technologii wirtualizacji i możemy porównać pytanie o ich popularność w pewne konteksty z popularnością języków komputerowych: zależy to prawdopodobnie od zalet technicznych każdego rozwiązania, ale także od wielu czynników, które po prostu określę jako „przypadek”).


1
Nie ograniczając się już do Linuksa, Windows 16 ma ten sam rodzaj umiejętności
Tensibai


7

Kontenery zwykle odnoszą się do czegoś takiego jak kontenery dokujące, które spopularyzowały nazwę

Cytuję tam z definicji dokera:

Za pomocą kontenerów wszystko, co jest potrzebne do uruchomienia oprogramowania, jest pakowane w izolowane pojemniki. W przeciwieństwie do maszyn wirtualnych kontenery nie zawierają pełnego systemu operacyjnego - potrzebne są tylko biblioteki i ustawienia wymagane do działania oprogramowania.

Nazwami root są kontenery linuksowe (lxc), których celem było odizolowanie procesu od systemu hosta. Pierwszym celem było uniknięcie zakłócenia procesu przejęcia systemu hosta.

Teraz są używane w szerszym zakresie. W nowoczesnej definicji „kontenera” wydasz mniej więcej pakiet dla środowiska wykonawczego, który już zawiera twoją aplikację, w razie potrzeby stanowi oprogramowanie pośrednie i wszystkie niezbędne biblioteki i upewnij się, że będzie działał na dowolnym kompatybilnym systemie.

Drugą zaletą jest to, że pozwala na używanie wielu aplikacji z tą samą zależnością w różnych wersjach bez konieczności dokładnego dostosowywania zmiennych środowiskowych, aby załadować poprawną.

Jest mało prawdopodobne w systemie VM, takim jak maszyna wirtualna wirtualnego pudełka lub instancja EC2 w AWS, kontenery są wirtualne tylko na poziomie systemu plików i izolowane tylko na stosie pamięci. Nadal współużytkują ten sam host, a system operacyjny pod nimi będzie arbitrażował procesory cpu.

Maszyna wirtualna jest wirtualna na poziomie sprzętowym, a system operacyjny jest uruchomiony, kontener jest wirtualny na poziomie systemu operacyjnego, a proces jest uruchamiany.


1
Hm, więc coś takiego jak obraz VirtualBox (lub cokolwiek, co nazywa się w VirtualBox) może również kwalifikować się jako „kontener”, czy nie rozumiem tego?
Pierre.Vriens

Zobaczyłem, że zapomniałem części pytania, dodałem różnicę, rozszerzając odpowiedź.
Tensibai

3

Z definicji AWS :

Kontenery to metoda wirtualizacji systemu operacyjnego, która umożliwia uruchamianie aplikacji i jej zależności w procesach izolowanych od zasobów. Kontenery umożliwiają łatwe pakowanie kodu aplikacji, konfiguracji i zależności w łatwe w użyciu elementy składowe, które zapewniają spójność środowiskową, wydajność operacyjną, produktywność programistów i kontrolę wersji. Kontenery mogą pomóc zapewnić szybkie, niezawodne i konsekwentne wdrażanie aplikacji niezależnie od środowiska wdrażania. Kontenery zapewniają również bardziej szczegółową kontrolę nad zasobami, zwiększając wydajność infrastruktury.

Konteneryzacja to pakowanie wszystkich niezbędnych potrzeb niezbędnych do wykonania określonego zadania / środowiska, dzięki czemu jest samowystarczalna i może być uruchamiana na dowolnej platformie, która eliminuje wiele bólu, jeśli chodzi o konfigurowanie i instalowanie rzeczy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.