Właśnie zacząłem studiować Dockera i jest coś, co jest dla mnie dość mylące. Jak czytałem na stronie Dockera, pojemnik różni się od maszyny wirtualnej. Zrozumiałem, że kontener to tylko piaskownica, w której działa cały izolowany system plików.
Przeczytałem również, że w kontenerze nie jest zainstalowany system operacyjny gościa. Zamiast tego opiera się na jądrze systemu operacyjnego.
Wszystko w porządku. Jestem zdezorientowany, że istnieją obrazy Docker nazwane na cześć systemów operacyjnych. Widzimy obrazy takie jak Ubuntu, Debian, Fedora, CentOS i tak dalej.
Chodzi mi o to: czym tak naprawdę są te obrazy? Czym różni się tworzenie kontenera na podstawie obrazu Debiana od tworzenia maszyny wirtualnej i instalowania Debiana?
Myślałem, że w kontenerach nie ma zainstalowanego systemu operacyjnego gościa, ale podczas tworzenia obrazów opieramy je na obrazie nazwanym na podstawie jednego systemu operacyjnego.
Ponadto w przykładach, które widziałem, kiedy to robimy docker run ubuntu echo "hello world"
, wydaje się, że uruchamiamy maszynę Wirtualną za pomocą Ubuntu i uruchamiamy polecenie echo "hello world"
.
W ten sam sposób, kiedy to robimy docker run -it ubuntu /bin/bash
, wydaje się, że uruchamiamy maszynę wirtualną z Ubuntu i uzyskujemy do niej dostęp za pomocą wiersza poleceń.
W każdym razie, o co chodzi z tymi obrazami po systemach operacyjnych? Czym różni się uruchamianie kontenera z jednym z tych obrazów i rozwijanie maszyny wirtualnej z odpowiednim systemem operacyjnym gościa?
Pomysł polega na tym, że po prostu udostępniamy jądro systemowi operacyjnemu hosta (w konsekwencji mamy dostęp do podstawowych zasobów sprzętowych komputera, bez potrzeby wirtualizacji sprzętu), ale nadal używamy plików i plików binarnych każdego innego systemu w kontenerach w celu do obsługi dowolnej aplikacji, którą chcemy uruchomić?
źródło
Odpowiedzi:
Ponieważ wszystkie dystrybucje Linuksa działają tak samo (tak, to trochę uproszczone) jądro Linuksa i różnią się tylko oprogramowaniem dla użytkowników, bardzo łatwo jest symulować inne środowisko dystrybucji - po prostu instalując to oprogramowanie i udając, że jest to inna dystrybucja. Mówiąc konkretnie, instalacja kontenera CentOS w systemie Ubuntu OS będzie oznaczać, że dostaniesz przestrzeń użytkownika z CentOS, wciąż działając z tym samym jądrem, nawet z inną instancją jądra.
Tak więc lekka wirtualizacja przypomina izolowanie przedziałów w tym samym systemie operacyjnym. Prawdziwa wirtualizacja Au contraire ma inny pełnoprawny system operacyjny w systemie operacyjnym hosta. Dlatego doker nie może uruchomić FreeBSD ani Windowsa w systemie Linux.
Jeśli byłoby to łatwiejsze, możesz pomyśleć, że docker jest rodzajem bardzo wyrafinowanego i zaawansowanego środowiska chroot.
źródło
Kontenery działają na pojedynczym jądrze. Innymi słowy, wszystkie kontenery mają pojedyncze jądro (Host OS). Natomiast hiperwizory mają wiele jąder. Każda maszyna wirtualna działa na innym jądrze.
A „docker run ubuntu” przypomina tworzenie środowiska chroot.
źródło