Kontenery Docker mają własne jądro, czy nie?

65

Widzę, że wiele obrazów dokerów w repozytorium dokerów jest wykonanych przy użyciu bazy Ubuntu.

Co to znaczy? Czy każdy kontener zawiera zredukowaną wersję jądra systemu Linux?

Czy kontenery siedzą na własnych jądrach? Ale myślałem, że kontenery współużytkują jądro hosta (którym w niektórych przypadkach jest boot2docker, niestandardowa kompilacja Tiny Core Linux, a w innych coś takiego jak CoreOS).

EDYCJA: nieco wyjaśnienie pytania. Tak, wiem, że doker to kontener procesu, a nie pełna maszyna wirtualna. Ale skoro w oficjalnym rejestrze hubu dokującego i innych systemach operacyjnych, takich jak CentOS, znajdują się kontenery „Ubuntu”, co oznacza uruchomienie Ubuntu w kontenerze?

Odpowiedź: Ach, to właśnie mnie olśniło. Są to procesy lądowe użytkowników Ubuntu, zawierające apt-get i inne procesy konfiguracyjne dla konkretnej wersji Ubuntu. Podobnie dla CentOS. Docker to nie pojedynczy proces, tylko pojedynczy wpis. Zatem dla tych dystrybucji punktem wejścia jest jakiś proces inicjujący, który odradza inne procesy.

stewart99
źródło
2
„To procesy lądowe użytkowników Ubuntu” - nie tylko procesy, ale także biblioteki.
osgx

Odpowiedzi:

37

Docker używa jądra systemu operacyjnego hosta, wewnątrz kontenera nie ma niestandardowego ani dodatkowego jądra. Wszystkie kontenery uruchomione na komputerze współużytkują to jądro „hosta”.

Wikipedia mówi http://en.wikipedia.org/wiki/Docker_(software) , które

Docker korzysta z funkcji izolacji zasobów jądra Linux, takich jak cgroups i przestrzenie nazw jądra, aby umożliwić niezależnym „kontenerom” działanie w pojedynczej instancji Linuksa, unikając narzutu związanego z uruchamianiem maszyn wirtualnych.

cgroups, przestrzeni nazw i LXC to cechy jądra Linuksa do izolowania grup procesów; wciąż jest jedno jądro, jeden harmonogram i jedno wystąpienie menedżera pamięci jądra.

Boot2docker i CoreOS są po prostu lekkimi dystrybucjami Linuksa z niektórymi jądrami hosta; można ich użyć do załadowania kontenerów Docker.

http://boot2docker.io/

boot2docker to lekka dystrybucja Linuksa oparta na Tiny Core Linux stworzona specjalnie do uruchamiania kontenerów Docker. Działa całkowicie z pamięci RAM, waży ~ 27 MB i uruchamia się w ~ 5s (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Pojedynczy host kontrolny (instancja CoreOS) obsługuje wiele izolowanych systemów Linux (kontenerów), wykorzystując Docker jako dodatkową warstwę abstrakcji i interfejsu [14] do podstawowych funkcji wirtualizacji jądra Linux na poziomie systemu operacyjnego. ... Podejście to opiera się na funkcjonalności cgroups jądra Linuksa, która zapewnia izolację przestrzeni nazw i możliwości ograniczania, rozliczania i izolowania wykorzystania zasobów (procesora, pamięci, dyskowych operacji we / wy itp.) Dla kolekcji procesów.

osgx
źródło
1
To nie odpowiada na pytanie.
EML
2
EML, które pytanie? Domyślnie wszystkie kontenery Docker nie mają własnych jąder. Istnieje tylko jedno jądro hosta dla wszystkich kontenerów Docker.
osgx
pewnie, twoja odpowiedź jest dobra, o ile to możliwe, ale OP chciał wiedzieć, dlaczego musi FROMmieć obraz podstawowy Ubuntu, gdy host już działa Ubuntu. Aby odpowiedzieć na pytanie, musisz wyjaśnić, co to jest obraz podstawowy.
EML
2
EML, pytanie zostało edytowane za pomocą „Clarifying” ( superuser.com/posts/889472/revisions ) po opublikowaniu mojej odpowiedzi, więc jest to odpowiedź na pierwotne pytanie bez wyjaśnienia. Jeśli masz jakieś informacje do udostępnienia na temat obrazów podstawowych i jąder w oknie dokowanym, dodaj inną odpowiedź.
osgx
17

W prawie wszystkich przypadkach jądro systemu operacyjnego hosta jest współużytkowane. Aby uruchomić inne jądro, musisz użyć wirtualizacji. Jest to rzadkie i stosowane tylko wtedy, gdy jest to konieczne ze względu na obniżenie wydajności.

„Kontener Docker Engine zawiera tylko aplikację i jej zależności. Działa jako izolowany proces w przestrzeni użytkownika w systemie operacyjnym hosta, współużytkując jądro z innymi kontenerami. W ten sposób cieszy się z izolacji zasobów i alokacji zasobów maszyn wirtualnych, ale jest o wiele więcej przenośny i wydajny ”.

To może pomóc wyjaśnić, jak to działa: wprowadź opis zdjęcia tutaj

Źródło: https://www.docker.com/whatisdocker/

Jeremiasz Bararar
źródło
4
Każde źródło „Paczek może używać różnych jąder” ??? Sam Docker nie może używać kilku jąder, zawsze jest tylko jedno jądro hosta. Tylko w połączeniu z hypervisorem (wirtualizacją) możemy uruchomić kilka hostów, każdy z własną wersją jądra i uruchomić jeden Docker na hosta wirtualnego; ale dla każdego hosta będzie tylko jedno jądro dla hosta i jego kontenerów Docked)
osgx
2
Co to jest paczka? Kontener Docker nie ma w sobie jądra; właśnie zainstalował się i uruchomił w jądrze używanym na hoście. Tak więc: jeden Docker = jeden serwer = jedno jądro, tak jak pokazano na rysunku. Nie ma możliwości użycia dwóch jąder z jednym silnikiem Dockera; wszystkie kontenery w tym silniku będą używać tego samego jądra. Myślę, że poprawna odpowiedź brzmi: „Nie, kontenery Docker nie mogą używać różnych jąder w ramach jednej instancji Docker Engine”
osgx,
1
Każdy kontener dokerów może uruchamiać dowolny kod, w tym oprogramowanie do wirtualizacji, które jest w stanie załadować dowolne jądro, jakie może wymagać twoje oprogramowanie. Jeśli chcesz, możesz uruchomić system Windows w kontenerze.
JeremiahBarrar
1
Jeremiasz Barrar, rozumiem, dziękuję za wyjaśnienia. Czy uruchomione oprogramowanie do wirtualizacji z wnętrza kontenera Docker jest udokumentowane i czy jest obsługiwane przez Docker? Jaki rodzaj wirtualizacji będzie działał z Dockera (oprogramowanie qemu, qemu + kvm, xen, ...)?
osgx
2
Pierwsze zdanie jest mylące. Używanie maszyny wirtualnej wewnątrz rodzaju kontenera pokonuje sens używania Dockera.
user2707671