Tryb odłączony platformy Docker

88

Co to jest tryb odłączony w świecie Dockera? Czytałem ten artykuł Link , ale nie wyjaśnia on dokładnie, co oznacza tryb odłączony.

softshipper
źródło

Odpowiedzi:

145

Możesz uruchomić kontener Dockera w trybie odłączonym za pomocą pliku -d opcji. Więc kontener uruchamia się i działa w tle. Oznacza to, że uruchamiasz kontener i możesz użyć konsoli po uruchomieniu do innych poleceń.

Przeciwieństwem trybu odłączonego jest tryb pierwszoplanowy. To jest tryb domyślny, gdy -dopcja nie jest używana. W tym trybie konsola, której używasz do wykonania, docker runzostanie podłączona do standardowego wejścia, wyjścia i błędu. Oznacza to, że konsola jest podłączona do procesu kontenera.

W trybie odłączonym możesz śledzić standardowe dane wyjściowe kontenera docker za pomocą docker logs -f <container_ID>.

Po prostu wypróbuj obie opcje. Zawsze używam trybu odłączonego do uruchamiania kontenerów. Mam nadzieję, że mógłbym to wyjaśnić trochę jaśniej.

Sim
źródło
Cześć, co jest niejasne w tym, co powiedziałeś - a dokumentacja dockera mówi, że „możesz ... użyć kontenera hte po uruchomieniu dla innych poleceń”. Oczywiście na pierwszym planie używasz kontenera dla innych poleceń, jeśli masz -it i pojawi się monit. Wciąż szukam definicji -d ...
Brian Bulkowski
3
@BrianBulkowski - wcale nie o tym mówi ta odpowiedź. Fraza „… może używać konsoli po uruchomieniu…” oznacza, że ​​terminal, z którego został uruchomiony kontener docker, jest nadal użyteczny jako zwykła powłoka, podczas gdy kontener docker działa w tle.
Bezużyteczne
czy możesz również przesłać dane wyjściowe dzienników do pliku? Jeśli wywołam docker logs -f <container_ID>, mój terminal pracuje jak szalony, drukując tylko jedną linię po drugiej.
Jürgen K.
@ JürgenK. Dowiedziałem się, że możesz po prostu to zrobić docker logs -f [container_ID] > logs.txt. Jeśli to nie zadziała, spróbuj dodać flagę `` -it '' podczas uruchamiania kontenera Dockera, zgodnie z sugestią @BMitch poniżej.
Sanlok Lee,
@Sanlok Lee. Dzięki. Czy można ustawić limit numerów wierszy w pliku dziennika Dockera? Rozmiar szybko rośnie, muszę to wyjaśnić
Jürgen K.
31

Opcja odłączania w wierszu poleceń docker wskazuje, że klient docker ( docker) wyśle ​​żądanie do serwera ( dockerd), a następnie zakończy działanie, podczas gdy to żądanie będzie kontynuowane na serwerze. Częścią zamieszania może być to, że docker wygląda jak pojedynczy proces, podczas gdy w rzeczywistości jest to aplikacja klient / serwer, gdzie klient jest tylko cienkim frontendem w REST API, który wysyła każde polecenie do serwera.

Z a docker container run --detachoznacza to, że kontener zostanie utworzony, serwer odpowie identyfikatorem kontenera, jeśli się powiedzie, a kontener będzie nadal działał na serwerze, podczas gdy możesz wykonywać inne polecenia. Jest to często używane w przypadku serwera (np. Nginx), na którym chcesz uruchomić w tle, podczas gdy kontynuujesz wykonywanie innych poleceń. Pamiętaj, że nadal możesz skonfigurować kontener z opcjami --interactivei -tty(często w skrócie -it), a później uruchomić a, docker container attachaby połączyć się z już działającym kontenerem. (Uwaga, dopóki nie podłączysz się do kontenera działającego z -itd, każda próba odczytu ze standardowego wejścia przez kontener zawiesza się, zamiast zobaczyć koniec danych wejściowych, który często powoduje natychmiastowe wyjście, jeśli właśnie zdałeś -d.)

W przypadku uruchomienia bez opcji odłączania klient natychmiast uruchomi wywołanie funkcji attach API po utworzeniu kontenera, aby można było zobaczyć dane wyjściowe i opcjonalnie podać dane wejściowe do uruchomionego procesu w kontenerze. Jest to przydatne, jeśli w Twoim kontenerze działa coś interaktywnego (np /bin/bash.).

Kilka innych poleceń umożliwia opcję odłączania, w tym docker-compose up -duruchomienie całego projektu i pozostawienie go uruchomionego na serwerze w tle. Istnieje również wiele docker servicepoleceń, które zostaną odłączone po przesłaniu zmiany na serwer w celu utworzenia lub zaktualizowania stanu docelowego usługi, lub jeśli nie odłączysz, klient będzie czekał, aż bieżący stan usługi będzie zgodny ze stanem docelowym i możesz zobaczyć postęp wdrażania. Zauważ docker service, że w przypadku poleceń może być konieczne przekazanie, --detach=falseaby pozostać podłączonym, zachowanie zmieniło się w ciągu ostatniego roku w zależności od wersji.

BMitch
źródło
1
IMO, warto również wspomnieć o interaktywnym odłączaniu od dołączonego pojemnika ( CTRL-p CTRL-q , --detach-keys)
Leon,
@Leon dobra rada, ale upewnij się, że jesteś przymocowany do kontenera z obydwoma --interactivei --tty(aka -it), aby to zadziałało.
BMitch
1
Dzięki @BMitch! Myślę, że teraz rozumiem.
VSO,
1
Ładnie wyjaśnione @BMitch, szkoda, że ​​dokumenty nie są tak dokładne!
Ravi Tiwari
-6
docker run -d -t ubuntu:14.04

docker run - utwórz wystąpienie z obrazu docker jako kontener docker. (jeśli obraz nie jest dostępny lokalnie, jest pobierany z centrum docker) ubuntu - nazwa obrazu

14.04 - Tag

-d, --detach - Tryb odłączania

-t, --tty - przydziela pseudo-TTY

Siddharth Kumar
źródło
13
To nie jest odpowiedź na pytanie.
0xc0de