2014-07-11 14 views
42

Załóżmy, że uruchamiam dużą liczbę kontenerów doków, które są oparte na tym samym obrazie dokowania. Oznacza to, że każdy kontener dokera działa w tej samej aplikacji. Może się zdarzyć, że aplikacja jest wystarczająco duża i wymaga dużej ilości pamięci na dysku twardym.Pojemnik dokera i zużycie pamięci

Jak to się dzieje?

Czy wszystkie kontenery dokowane dzielą część statyczną zdefiniowaną w obrazie dokowanego?

Czy nie ma sensu kopiowanie aplikacji do jakiegoś katalogu na komputerze, który służy do uruchamiania kontenerów doków i do instalowania tego katalogu aplikacji dla każdego kontenera dokowanego?

Odpowiedz

74

Docker udostępnia zasoby na poziomie jądra. Oznacza to, że logika aplikacji nie jest nigdy replikowana po uruchomieniu. Jeśli uruchamiasz notatnik 1000 razy, nadal jest on przechowywany tylko raz na dysku twardym, to samo dotyczy instancji dockera.

Po uruchomieniu 100 wystąpień tego samego obrazu dokowanego, wszystko co naprawdę robisz, to utrzymywanie stanu tego samego oprogramowania w pamięci RAM w 100 różnych oddzielnych liniach czasowych. Procesor (-y) hosta przesuwa stan in-memory każdej z tych instancji kontenera na kontrolujące je oprogramowanie, więc zużywasz 100-krotnie więcej pamięci RAM wymaganej do uruchomienia aplikacji. Nie ma sensu fizycznie przechowywać dokładnie tego samego kodu bajtu dla oprogramowania 100 razy, ponieważ ta część aplikacji jest zawsze statyczna i nigdy się nie zmieni. (Jeśli nie napiszesz jakiegoś szalonego, samoregulującego się oprogramowania lub zdecydujesz się na przebudowanie i ponowne wdrożenie obrazu kontenera)

To jest powód, dla którego pojemniki nie pozwalają na wytrwałość po wyjęciu z pudełka i jak różni się okno dokowane od zwykłych maszyn wirtualnych, używaj wirtualnych dysków twardych. Dotyczy to jednak tylko trwałości wewnątrz kontenera. Pliki, które są zmieniane przez oprogramowanie dokowania na dysku twardym, są "montowane" w kontenerach przy użyciu woluminów dokowania, a zatem nie są częścią środowiska dokowania, ale po prostu są w nich montowane. (Przeczytaj więcej na ten temat pod adresem: https://docs.docker.com/userguide/dockervolumes/)

Kolejnym pytaniem, które możesz chcieć zapytać, gdy myślisz o tym, jest to, jak zmienia się zawartość dockera na jego dysku w środowisku wykonawczym. To, co naprawdę jest miłe do sprawdzenia, to fakt, w jaki sposób dormerowi udaje się to zrobić. Oryginalny stan dysku twardego kontenera jest taki, jaki jest mu dany z obrazu. To może NOT napisz do tego obrazu. Zamiast zapisywania obrazu, tworzona jest różnica między zmianami stanu wewnętrznego kontenerów w porównaniu do obrazu dokowanego. Docker używa technologii o nazwie "Union Filesystem", która tworzy warstwę różnicową na szczycie początkowego stanu obrazu dokowanego.

Ten „diff” (określany jako zapisywalny pojemnika w obrazek poniżej) jest przechowywany w pamięci i znika po usunięciu swój pojemnik. (Chyba, że ​​należy użyć polecenia „doker popełnić”, ale: Nie polecam tego Stan nowego Döcker obrazu nie jest reprezentowana w dockerfile i nie można łatwo regenerować z przebudowy.)

Union Filesystem

Powiązane problemy