Jaka jest zależność między systemem operacyjnym hosta platformy Docker a systemem operacyjnym podstawowego obrazu kontenera?

122

Nie jestem pewien, czy zadaję właściwe pytanie ... ale kiedy czytam wszystkie docker, które mogę dostać w swoje ręce, widzę, że mogę zainstalować Dockera na Ubuntu 12.04 (na przykład), a następnie mogę zainstalować kontener Fedory czy inna wersja Ubuntu? (jest przykład, w którym użytkownik zainstalował busybox w kontenerze).

I oczywiście mogłem się całkowicie mylić.

Ale spodziewałbym się, że istnieje efemeryczne połączenie między systemem podstawowym a pojemnikiem.

przekształcone: jaka jest relacja między systemem operacyjnym hosta a systemem operacyjnym podstawowego obrazu kontenera?

Richard
źródło

Odpowiedzi:

100

Jak wspomniano w BraveNewCurrency, jedyną relacją między systemem operacyjnym hosta a kontenerem jest Kernel.

Jest to jedna z głównych różnic między dockerem a „zwykłymi” maszynami wirtualnymi, nie ma narzutów, wszystko odbywa się bezpośrednio w jądrze hosta.

Dlatego w kontenerze można uruchamiać tylko dystrybucję / pliki binarne oparte na systemie Linux. Jeśli chcesz uruchomić coś innego, nie jest to niemożliwe, ale potrzebujesz jakiejś wirtualizacji w kontenerze (qemu, kvm itp.)

Docker zarządza obrazami, które są reprezentacją systemu plików. Możesz zainstalować dowolną dystrybucję Linuksa lub po prostu umieścić pliki binarne.

Rzeczywiście, dla wygody przykładu, często polegamy na obrazach podstawowych, ale możesz również utworzyć swój obraz bez żadnej z bibliotek dystrybucyjnych / plików binarnych. W ten sposób miałbyś naprawdę mały, ale funkcjonalny pojemnik.

Jeszcze jedna uwaga dotycząca dystrybucji: ponieważ jądro jest nadal jądrem hosta, nie będziesz mieć żadnych specyficznych modułów / łatek jądra dostarczonych przez dystrybucję.

trzeszczenie
źródło
2
więc jeśli hostem jest Ubuntu, to kontenerem też będzie Ubuntu?
Richard,
21
Jądro kontenera będzie tym z Ubuntu, ale nic więcej. Możesz łatwo uruchomić centos, archlinux, debian lub dowolną inną dystrybucję opartą na systemie Linux jako kontenery.
creack
37
Chociaż te informacje mogą być podane bezpośrednio / pośrednio na stronie dockera, naprawdę uważam, że powinni to trochę wyjaśnić. Przeszedłem przez stronę główną, przegląd, interaktywny samouczek i większość podstawowych instrukcji. Mimo to byłem zdezorientowany w tym temacie i zacząłem zakładać, że najlepsza wydajność dockera (na podstawie diagramów architektury ze strony) będzie wymagała dopasowania na hoście i systemie operacyjnym kontenera. Jestem nowy w koncepcji "jądra Linuksa", więc nie było to dla mnie od razu oczywiste. Wiedza o tym natychmiast sprawia, że ​​docker jest podwójnie złym dupkiem.
ctrlplusb
2
Docker to dość złożony projekt, który wykorzystuje zaawansowane funkcje. W pewnym momencie zakładamy, że użytkownik ma pewną wiedzę, taką jak różnica między systemem operacyjnym a dystrybucją. Jeśli uważasz, że przyniesie to wartość dodaną, dokumentacja jest typu open source i możesz przesłać żądanie ściągnięcia.
creack
3
Wydaje się to wskazywać, że tylko części przestrzeni użytkownika systemu operacyjnego (biblioteki, polecenia, aplikacje) mogą być konteneryzowane. Jeśli aplikacja wymaga innej wersji jądra (np. 3.10 w porównaniu z 4.9), może nie działać w kontenerze. Czy to prawda?
David C.
23

Dosłownie jedyne, co ich łączy, to jądro. Cały ich świat (system plików) znajduje się w kontenerze docker.

BraveNewCurrency
źródło
1

Jest jeszcze jedna uwaga - nawet jeśli oba jądra są takie same, istnieje problem, jeśli system operacyjny hosta nie obsługuje Dockera, jak RHEL 6: https://access.redhat.com/solutions/1378023

Więc nie będziesz w stanie uruchomić kontenera na RHEL 6, nawet jeśli obraz jest linuksowy.

flow2k
źródło