Istnieje kilka pytań dotyczących kontenerów , takich jak:
- Jaką rolę odgrywają narzędzia do zarządzania konfiguracją w niezmiennej infrastrukturze?
- Jakie problemy rozwiązuje aranżacja kontenera?
- Proste pojemniki CI / CD w AWS
Moje pytania :
- Co to właściwie jest „kontener” (w kontekście DevOps)?
- Dlaczego są używane?
terminology
containers
Pierre.Vriens
źródło
źródło
Odpowiedzi:
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:
źródło
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:
(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”).
źródło
Kontenery zwykle odnoszą się do czegoś takiego jak kontenery dokujące, które spopularyzowały nazwę
Cytuję tam z definicji dokera:
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.
źródło
Z definicji AWS :
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.
źródło