Zalecenie wynika z celu i projektu wirtualizacji na poziomie systemu operacyjnego
Kontenery zostały zaprojektowane tak, aby odizolować proces dla innych, dając mu własną przestrzeń użytkownika i system plików.
Jest to logiczna ewolucja chroot
zapewniająca izolowany system plików. Kolejnym krokiem było odizolowanie procesów od innych, aby uniknąć nadpisywania pamięci i umożliwienie korzystania z tego samego zasobu (np. Port 8080 TCP) z wielu procesów bez konfliktów.
Zainteresowanie pojemnikiem to spakowanie potrzebnej biblioteki do procesu bez martwienia się o konflikty wersji. Jeśli uruchamiasz wiele procesów wymagających dwóch wersji tej samej biblioteki w tej samej przestrzeni użytkownika i systemie plików, musiałbyś dostosować przynajmniej LDPATH dla każdego procesu, aby najpierw znaleźć właściwą bibliotekę, a niektórych bibliotek nie można zmienić w ten sposób, ponieważ ich ścieżka jest zakodowana na stałe w pliku wykonywalnym w czasie kompilacji, zobacz to pytanie SO, aby uzyskać więcej szczegółów.
Na poziomie sieci musisz skonfigurować każdy proces, aby uniknąć używania tych samych portów.
Uruchamianie wielu procesów w tym samym kontenerze wymaga pewnych drobnych poprawek, a na koniec pokonaj cel izolacji, jeśli możesz uruchamiać wiele procesów w tej samej przestrzeni użytkownika, współużytkując ten sam system plików i zasoby sieciowe, to dlaczego nie uruchomić ich na samym hoście?
Oto niewyczerpująca lista ciężkich poprawek / pułapek, o których mogę myśleć:
Obsługa dzienników
Będąc z zamontowanym woluminem lub przeplatanym na standardowym wyjściu, przyniesie to pewne zarządzanie. Jeśli używasz zamontowanego woluminu, twój kontener powinien mieć własne „miejsce” na hoście lub dwa takie same kontenery będą walczyć o ten sam zasób. Podczas przeplatania na standardowe wyjście, aby z docker logs
niego skorzystać , może stać się koszmarem do analizy, jeśli źródeł nie można łatwo zidentyfikować.
Uważaj na procesy zombie
Jeśli jeden z twoich procesów ulegnie awarii kontenera, superwizor może nie być w stanie wyczyścić dzieci w stanie zombie, a inicjator hosta nigdy ich nie odziedziczy. Po wyczerpaniu liczby dostępnych ofert (2 ^ 22, czyli około 4 milionów), wiele rzeczy zawiedzie.
Rozdzielenie obaw
Jeśli uruchomisz dwie oddzielne rzeczy, takie jak serwer apache i logstash w tym samym kontenerze, może to ułatwić obsługę logów, ale musisz wyłączyć apache, aby zaktualizować logstash. (W rzeczywistości powinieneś użyć sterownika rejestrującego Dockera). Czy będzie to wdzięczne przestanie czekać na zakończenie bieżących sesji, czy nie? Jeśli jest to pełen wdzięku przystanek, nowa wersja może zająć trochę czasu. Jeśli zabijesz, wpłyniesz na użytkowników dla nadawcy dziennika i tego należy unikać IMHO.
Wreszcie, gdy masz wiele procesów, odtwarzasz system operacyjny, a w tym przypadku wirtualizacja sprzętu brzmi bardziej zgodnie z tą potrzebą.