2014-09-29 9 views
7

Po przeczytaniu introduction of the phusion/baseimage mam ochotę tworzyć pojemniki z obrazu Ubuntu lub jakiegokolwiek innego oficjalnego obrazu dystrybucji i uruchamianie pojedynczego procesu aplikacji w kontenerze jest błędne.Czy nie należy uruchamiać pojedynczego procesu w oknie dokowanym bez dostarczania podstawowych usług systemowych?

Głównymi powodami w skrócie:

  • Brak odpowiedniej proces init (który obsługuje zombie i osierocone procesy)
  • żadna usługa syslog

Na podstawie tych faktów, większość oficjalnej dokowanym obrazy dostępne w oknie dokowania wydają się robić coś złego. Jako przykład, obraz MySQL uruchamia mysqld jako jedyny proces i nie zapewnia żadnych obiektów logowania innych niż komunikaty napisane przez mysqld do STDOUT i STDERR, dostępne przez docker logs.

Teraz powstaje pytanie, który jest odpowiednim sposobem na uruchomienie usługi wewnątrz kontenera w doku. Czy to źle, aby uruchomić tylko jeden proces aplikacji w kontenerze dokowania i nie udostępniać podstawowych usług systemu Linux, takich jak syslog? Czy zależy to od rodzaju usługi uruchomionej w kontenerze?

Odpowiedz

1

To zależy od rodzaju usługi, którą używasz.

Docker pozwala "budować, wysyłać i uruchamiać dowolną aplikację w dowolnym miejscu" (ze strony internetowej). To mówi mi, że jeśli "aplikacja" zawiera/wymaga wielu usług/procesów, to powinny one być uruchamiane w jednym kontenerze Docker. Byłoby bardzo ciężko, aby użytkownik musiał pobrać, a następnie uruchomić wiele obrazów Docker tylko po to, aby uruchomić jedną aplikację.

Na marginesie, dzielenie aplikacji na wiele obrazów podlega dryfowi konfiguracji.

Widzę, dlaczego chciałbyś ograniczyć kontener dokera do jednego procesu. Jednym z powodów bycia uptime. Podczas tworzenia systemu dokowania Docker niezbędne jest ograniczenie czasu działania kontenera do minimum, aby skalowanie było szybkie. Oznacza to, że jeśli uda mi się uciec z jednym procesem na kontener Docker, powinienem to zrobić. Ale to nie zawsze jest możliwe.

Aby odpowiedzieć bezpośrednio na swoje pytanie. Nie, nie jest źle uruchamianie pojedynczego procesu w oknie dokowanym.

HTH

+1

Nie pytam, czy prawidłowe jest uruchamianie pojedynczego procesu, czy nie, pytam, czy prawidłowe jest uruchamianie procesu aplikacji w kontenerze dokowania ** bez ** dostarczania wspólnych usług systemowych System Linux. Próbowałem poprawić moje pytanie. Dzięki za twój wysiłek. – CodeZombie

7

Sprawdź to discussion dobrego przeczytać na ten temat. Zasadniczo oficjalna linia partyjna z Solomon Hykes i docker jest taka, że ​​kontenery dokowane powinny znajdować się tak blisko pojedynczych procesów, jak to tylko możliwe. Może być wiele takich serwerów na jednym "prawdziwym" serwerze. Jeśli proces się nie powiedzie, powinieneś po prostu uruchomić nowy kontener dokowania zamiast próbować inicjalizacji itp. Wewnątrz kontenerów. Więc jeśli szukasz najlepszych praktyk kanonicznych, odpowiedź brzmi: nie ma podstawowych usług linuksowych. Ma to także sens, gdy myślisz w kategoriach wielu kontenerów dokowania działających na jednym węźle, czy naprawdę chcesz, aby wszystkie one uruchamiały własne wersje tych usług?

Zgodnie z tym stan logowania w usłudze dokowania to famously broken. Nawet Solomon Hykes twórca dockera przyznaje, że jest to dzieło w toku. Poza tym zwykle potrzebujesz trochę więcej elastyczności w celu wdrożenia w świecie rzeczywistym.Zwykle montuję logi do systemu hosta za pomocą woluminów i mam demona rotacji dziennika itp. Działającego w vm hosta. Podobnie instaluję sshd lub zostawiam otwartą interaktywną powłokę w kontenerze, dzięki czemu mogę wydawać drobne komendy bez ponownego uruchamiania, przynajmniej dopóki nie będę pewien, że moje kontenery są szczelne i nie będzie już potrzeby debugowania.

Edycja: Przy pomocy dockera 1.3 i polecenia exec nie jest już konieczne "pozostawienie otwartej powłoki interaktywnej".

Powiązane problemy