Niedawno zacząłem uczyć się dockera i wygląda na to, że większość ciężkiej pracy jest wykonywana przez jądro linuxa, używając przestrzeni nazw i cgroups.
Kilka rzeczy, które uważam za mylące, to:
Jaka jest różnica między przestrzenią nazw a cgroup? Jakie są różne przypadki użycia, do których się odnoszą?
Co Docker zaimplementował na szczycie tych, aby zyskać popularność?
Chciałbym poznać wewnętrzne cechy tych funkcji i poznać sposób ich implementacji.
Odpowiedzi:
Właściwe linki dla tych dwóch pojęć zostały poprawione w PR 14307 :
Z:
W skrócie:
Zobacz więcej w „ Anatomia kontenera: przestrzenie nazw, grupy cgroup i magia niektórych systemów plików ” autorstwa Jérôme Petazzoni .
Cgroups obejmują pomiary i ograniczanie zasobów:
Przestrzenie nazw zapewniają procesom własny widok systemu
Wiele przestrzeni nazw:
(remapowanie katalogu głównego kontenera na użytkownika nieuprzywilejowanego dla instancji demona jest w toku: PR 12648 : zobacz projekt )
źródło
chroot
oparty na jakiejś przestrzeni nazw? Czychroot
można zastąpić jakąś przestrzenią nazw?chroot
można zastąpić jakąś przestrzenią nazw?pivot_root
? ( unix.stackexchange.com/a/456777/7490 ) Zobacz także github.com/vincentbernat/jchrootcgroups ogranicza zasoby, z których proces lub zestaw procesów może korzystać. Te zasoby mogą obejmować procesor, pamięć, sieciowe I / O lub dostęp do systemu plików, podczas gdy przestrzeń nazw ogranicza widoczność grupy procesów do reszty systemu.
odwiedź stronę, aby dowiedzieć się więcej. Jak grupy cgrupy jądra Linuksa i przestrzenie nazw umożliwiły tworzenie nowoczesnych kontenerów
źródło
Cgroups (grupy kontrolne) zarządzają zasobami.
Określa, ile zasobów maszyny hosta ma być przekazanych kontenerom.
na przykład: - definiujemy zasoby w pliku yaml docker-compose do tworzenia usług takich jak:
Tutaj, w tym przykładzie, wyraźnie prosimy grupy cgroup o przydzielenie tych zasobów do konkretnego kontenera.
Przestrzenie nazw : zapewnia izolację procesów, pełną izolację kontenerów, oddzielny system plików.
Istnieje 6 typów przestrzeni nazw:
1. mount ns - dla systemu plików.
2. UTS (Unique time sharing) ns - który sprawdza różne nazwy hostów uruchomionych kontenerów
3. IPC ns - komunikacja międzyprocesowa
4. Sieć ns - dba o przydzielenie różnych adresów IP do różnych kontenerów
5. PID ns - izolacja identyfikatora procesu
6. użytkownik ns - inna nazwa użytkownika (UID)
źródło