[Uwaga: ta odpowiedź skupia się na kontenerach Linuksa i może nie mieć pełnego zastosowania do innych systemów operacyjnych. ]
Co to jest pojemnik?
To aplikacja : kontener to sposób na uruchamianie aplikacji, które są odizolowane od siebie. Zamiast wirtualizować sprzęt w celu obsługi wielu systemów operacyjnych, kontenery polegają na wirtualizacji systemu operacyjnego w celu uruchamiania wielu aplikacji. Oznacza to, że możesz uruchomić więcej kontenerów na tym samym sprzęcie niż maszyny wirtualne, ponieważ masz tylko jedną uruchomioną kopię systemu operacyjnego i nie musisz wstępnie przydzielać rdzeni pamięci i procesora dla każdego wystąpienia aplikacji. Podobnie jak każda inna aplikacja, gdy kontener potrzebuje procesora lub pamięci, przydziela je, a następnie zwalnia po zakończeniu, umożliwiając innym aplikacjom korzystanie z tych samych ograniczonych zasobów później.
Wykorzystują przestrzenie nazw jądra : każdy kontener domyślnie otrzyma środowisko, w którym znajdują się następujące przestrzenie nazw:
- Mount: systemy plików,
/w kontenerze będzie się różnić od tego /na hoście.
- PID: identyfikator procesu, pid 1 w kontenerze to uruchomiona aplikacja, ten identyfikator będzie inny, gdy będzie wyświetlany na hoście.
- Sieć: kontenery działają z własnym interfejsem sprzężenia zwrotnego (127.0.0.1) i domyślnie prywatnym adresem IP. Docker wykorzystuje technologie, takie jak sieci mostów linuksowych, do łączenia wielu kontenerów we własnej prywatnej sieci LAN.
- IPC: komunikacja międzyprocesowa
- UTS: obejmuje to nazwę hosta
- Użytkownik: możesz opcjonalnie przesunąć wszystkie identyfikatory użytkowników, aby były przesunięte w stosunku do identyfikatorów hosta
Każda z tych przestrzeni nazw zapobiega również zobaczeniu przez kontener elementów, takich jak system plików lub procesy na hoście lub w innych kontenerach, chyba że jawnie usuniesz tę izolację.
I inne narzędzia bezpieczeństwa Linuksa : Kontenery wykorzystują również inne funkcje bezpieczeństwa, takie jak SELinux, AppArmor, Capabilities i Seccomp, aby ograniczyć użytkownikom wewnątrz kontenera, w tym użytkownikowi root, możliwość ucieczki z kontenera lub negatywnego wpływu na hosta.
Pakuj aplikacje z ich zależnościami w celu zapewnienia przenośności : Pakowanie aplikacji do kontenera obejmuje złożenie nie tylko samej aplikacji, ale wszystkich zależności potrzebnych do uruchomienia tej aplikacji w przenośny obraz. Ten obraz jest podstawowym systemem plików używanym do tworzenia kontenera. Ponieważ izolujemy tylko aplikację, ten system plików nie zawiera jądra ani innych narzędzi systemu operacyjnego potrzebnych do wirtualizacji całego systemu operacyjnego. Dlatego obraz kontenera powinien być znacznie mniejszy niż obraz równoważnej maszyny wirtualnej, co przyspieszy wdrażanie go w węzłach w sieci. W rezultacie kontenery stały się popularną opcją wdrażania aplikacji w chmurze i zdalnych centrach danych.
Czy może zastąpić maszynę wirtualną przeznaczoną do rozwoju?
To zależy : jeśli w Twoim środowisku programistycznym działa Linux i albo nie potrzebujesz dostępu do urządzeń sprzętowych, albo dopuszczalny jest bezpośredni dostęp do sprzętu fizycznego, migracja do kontenera Linuksa jest dość prosta. Idealnym celem dla kontenera docker są aplikacje, takie jak internetowe API (np. Aplikacja REST), do których uzyskujesz dostęp przez sieć.
Jaki jest cel, w prostych słowach, używania Dockera w firmach? Główna zaleta ?
Dev lub Ops : Docker jest zwykle wprowadzany do środowiska w jednej z dwóch ścieżek. Programiści szukający sposobu na szybsze tworzenie i testowanie lokalnych aplikacji oraz operacje, które chcą wykonywać więcej zadań na mniejszym sprzęcie, niż byłoby to możliwe w przypadku maszyn wirtualnych.
Lub Devops : jednym z idealnych celów jest natychmiastowe wykorzystanie platformy Docker z poziomu narzędzia do wdrażania CI / CD, skompilowanie aplikacji i natychmiastowe zbudowanie obrazu, który jest wdrażany w celu programowania, CI, produkcji itp. Kontenery często skracają czas potrzebny na przeniesienie aplikacji. od zaewidencjonowania kodu do momentu udostępnienia go do testów, co zwiększa wydajność programistów. Po prawidłowym zaprojektowaniu ten sam obraz, który został przetestowany i zatwierdzony przez programistów i narzędzia CI, może zostać wdrożony w środowisku produkcyjnym. Ponieważ ten obraz zawiera wszystkie zależności aplikacji, ryzyko zepsucia się czegoś w środowisku produkcyjnym, które działało podczas programowania, jest znacznie zmniejszone.
Skalowalność : ostatnią kluczową zaletą kontenerów, o której wspomnę, jest to, że są zaprojektowane z myślą o skalowalności poziomej. Gdy masz aplikacje bezstanowe pod dużym obciążeniem, kontenery są znacznie łatwiejsze i szybsze do skalowania ze względu na ich mniejszy rozmiar obrazu i mniejsze obciążenie. Z tego powodu kontenery są używane przez wiele większych firm internetowych, takich jak Google i Netflix.