Software Development

Docker: kontener, strumienie we/wy i przeglądanie plików

Luty 29, 2016 0
Podziel się:

Polecenia kontenera mogą wprowadzać zmiany w jego systemie plików lub generować komunikaty w wyjściowym strumieniu danych. Celem tego wpisu jest przybliżenie sposób śledzenia aktywności kontenera: przeglądanie jego systemów plików oraz podgląd wyjściowego strumienia danych głównego procesu kontenera.

Ten wpis jest częścią serii wpisów o Dockerze. Jeżeli jakieś pojęcie jest używane bez wyjaśnienia to prawdopodobnie zostało wprowadzone w jednym z wcześniejszych wpisów.

Podgląd głównego procesu

Pogląd aktywności głównego procesu kontenera można uzyskać poprzez połączenie własnego okna terminala ze strumieniami wejścia/wyjścia głównego procesu kontenerem. Służy do tego polecenie docker attach. Połączenie może być ustanowione tylko z działającym kontenerem.

docker attach [id lub nazwa kontenera]

Dla przykładu uruchommy kontener obrazu ubuntu z opcją -d (proces drugoplanowy) i poleceniem: /bin/sh -c 'while true; do date; sleep 1; done'. W wyniku zadanego polecenia kontener co jedną sekundę będzie wyświetlał aktualną datę.

docker run --name="ubuntu-container" -d ubuntu /bin/sh -c "while true; do date; sleep 1; done" 

Kontener działa w tle dlatego nie widzimy żadnych komunikatów wyjścia. Podłączmy się do kontenera w celu obserwacji strumienia danych wyjściowych.

docker attach ubuntu-container

Powinniśmy zacząć obserwować daty i czas pojawiające się na ekranie.

Tue Jan 12 08:52:36 UTC 2016
Tue Jan 12 08:52:37 UTC 2016
Tue Jan 12 08:52:38 UTC 2016
[...]

Połączenie z kontenerem możemy przerwać za pomocą kombinacji Ctrl+C. Należy zauważyć, że spowoduje to zatrzymane głównego procesu kontenera. Jeżeli chcielibyśmy mieć możliwość odłączenia się od kontenera pozostawiając go działającym powinniśmy zastosować jedno z rozwiązań:

  • Uruchomić kontener z opcją -t (--tty=true), połączyć się z kontenerem, zakończyć połączenie za pomocą kombinacji Ctrl+C. Opcja -t spowoduje, że w kontenerze zostanie zaalokowany terminal.

    docker run -t --name=[id lub nazwa kontenera] [nazwa obrazu]
    docker attach [id lub nazwa kontenera]
    Ctrl+C
    
  • Uruchomić kontener z opcjami -t -i (--interactive=true), połączyć się z kontenerem, zakończyć połączenie za pomocą kombinacji Ctrl+P Ctrl+Q. Opcja -i powoduje, że w przypadku połączenia z kontenerem lokalny strumień wejścia zostanie przekierowany na strumień wejścia kontenera, a strumień wyjścia kontenera na lokalny strumień wyjścia.

    docker run -ti --name=[id lub nazwa kontenera] [nazwa obrazu]
    docker attach [id lub nazwa kontenera]
    Ctrl+P Ctrl+Q
    
  • Uruchomić kontener, połączyć się z kontenerem z opcją --sig-term=false, zakończyć połączenie za pomocą kombinacji Ctrl+C. Ustawienie opcji --sig-term na false powoduje, że w wyniku wciśnięcia kombinacji Ctrl+C główny proces kontenera nie otrzymuje sygnału kończącego jego działanie.

    docker run --name=[id lub nazwa kontenera] [nazwa obrazu]
    docker attach --sig-term=false [id lub nazwa kontenera]
    Ctrl+C
    

Przeglądanie plików

Swobodny dostęp do systemu plików działającego kontenera można uzyskać wykonując w nim polecenie tworzące nową powłokę. W celu uzyskania dostępu do strumieni wejścia i wyjścia powłoki polecenie docker exec należy wywołać z opcjami -i -t.

docker exec -it [id lub nazwa kontenera] bash

W wyniku powyższego polecenia znak zachęty w lokalnego terminala powinien zamienić się na znak zachęty terminala kontenera, np.:

root@6b3d860feb49:/# 

Jeżeli potrzebowalibyśmy kontenera tylko po to żeby wykonać jakieś operacje w jego konsoli wystarczy stworzyć go i uruchomić z opcjami -it i poleceniem bash. W przypadku obrazu ubuntu polecenie bash jest wykonywane domyślnie dlatego można je pominąć.

docker run -it ubuntu

Spis wpisów w serii

Oceń ten post
Tagi: ,
Piotr Wierzgała
Autor: Piotr Wierzgała
Programista Python zainteresowany tematyką uczenia maszynowego.

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości