2015-06-09 12 views
10

Pojawiło się pytanie, ponieważ przedstawiałem zespołowi Docker prezentację, na którą nie wiedziałem, jak odpowiedzieć.Aplikacje "dokowane" często są budowane na wierzchu kontenerów OS. Dlaczego to nie jest celem?

Wiele wstępnie skonstruowanych pojemników na Docker Hub, na przykład kontenera jboss/wildfly, zbudowano na wierzchu kontenerów dla określonego systemu operacyjnego (Ubuntu, CentOS itp.). Niektóre z tych kontenerów w rzeczywistości nie są niczym innym jak kontenerami dla tych systemów.

Jednak główną racją bytu Docker, to jest prime claim to fame, podstawą twierdzenia, że ​​jest ono lepsze niż technologie maszyn wirtualnych, jest to, że jest on lżejszy, ponieważ nie musi być zbudowany na systemie operacyjnym. Ale jeśli tak jest i większość kontenerów zawiera system operacyjny, czy nie oznacza to zniszczenia celu i unieważnienia roszczenia?

Co zatem jest w tych obrazach OS Docker i jak można jeszcze twierdzić, że jest lżejszy? Czy to trochę obnażona wersja systemu operacyjnego?

Czy można wykonać obraz dokowania, który nie jest zbudowany na systemie operacyjnym? Co decyduje o tym, kiedy aplikacja pobiera usługi OS z systemu operacyjnego osadzonego w kontenerze, w przeciwieństwie do pobierania usług systemu operacyjnego z hosta?

+1

O ile rozumiem, Docker daje prędkość zbliżoną do natywnej, ponieważ nie wymaga emulacji, wykorzystuje część samego jądra Linux. Wadą jest to, że kontener nie jest tak przenośny, ponieważ nie może już emulować kodu. Docker używa LXC. Połączone kontenery są kompatybilne z innymi systemami operacyjnymi, podstawowe kontenery są bardziej elastyczne w przypadku niestandardowego oprogramowania. – exussum

+0

Myślę, że "lekkie" twierdzenie Dockera należy rozumieć pod kątem wydajności. I rzeczywiście, pojemniki działają szybciej niż zwykłe maszyny wirtualne, ponieważ nie muszą emulować takich rzeczy jak sprzęt czy jądro. –

Odpowiedz

3

Obraz Docker (który najprawdopodobniej będzie zawierał system podstawowy z dystrybucji Linuksa), jest tylko do odczytu i jest rozszerzony o kilka warstw, które są włączone podczas pisania do lokalizacji. Możesz więc udostępnić podstawowy obrazek i mieć "dodatki", jeśli zechcesz. Nazywa się to unijnym systemem plików. Dokumentacja dokowania zawiera więcej informacji here. Ten rodzaj udostępniania powoduje, że Docker zużywa mniej zasobów (w tym przypadku przestrzeń fs) w porównaniu z maszynami wirtualnymi, gdzie trzeba zainstalować każdą dystrybucję.

Pamiętaj, że nie musisz mieć, aby mieć pełną instalację systemu Ubuntu (jądro jest współdzielone z systemem hosta, w każdym razie), po prostu większość z nich jest zwykle wymagana przez aplikacje, które chcesz uruchomić twój pojemnik. Możesz łatwo znaleźć zdjęcia, które są rozebrane, pomijając pliki, które nie są potrzebne do uruchamiania większości aplikacji, a jednocześnie są opłacalne dla wielu celów (możesz więc nadal udostępniać podstawowy obraz, patrz wyżej).

+0

jest to interesujące, ale nie do końca odpowiada na moje pytanie. Na obrazku pod linkiem, jaki jest rozmiar obrazu bazowego debiana w stosunku do hosta i dlaczego jest on potrzebny? Dlaczego potrzeba włączenia systemu operacyjnego nie powoduje unieważnienia twierdzenia, że ​​jest to mniejszy ślad niż maszyna wirtualna? Czy to dlatego, że jest to tylko podzbiór lub z innego powodu? –

+0

Komentowanie w odpowiedzi na twoje modyfikacje: ok, ale jak mogę zobaczyć, co jest w obrazie podstawowym? Dla zgrubnego pomysłu, postanowiłem porównać katalog/bin na hoście z katalogiem/bin kontenera. Ta ostatnia zawiera wiele plików nie zawartych w pierwszym, a gdy są zawarte w obu miejscach, te w pojemniku są większe. Czy możesz podać przybliżony obraz rzeczy, które nie są zawarte (powtórzone) w obrazie? –

+1

Odpowiedź na to w ogromnej mierze zależy od podstawowego obrazu, z którego korzystasz. Obrazy pobierane z sieci nie mają konkretnych odbiorców docelowych, więc prawdopodobnie są nastawione na wiele celów i dlatego nie są strasznie wydajne. [Ten przewodnik] (http://www.projectatomic.io/docs/docker-building-images/) wskazuje również, jak sprawdzać obrazy (poprzez uruchomienie '/ bin/bash' dla podstawowego obrazu). Istnieje [kilka] (https: // github.com/phusion/baseimage-docker) [próbuje] (http://stackoverflow.com/a/27384694/785663), aby zmniejszyć rozmiar obrazu podstawowego. To, czy pomagają, zależy od Twoich konkretnych potrzeb. – mabi

Powiązane problemy