Docker
Zarządzanie kontenerami
Szukaj…
Składnia
- docker rm [OPCJE] CONTAINER [CONTAINER ...]
- doker dołączyć CONTAINER [OPCJE]
- docker exec [OPCJE] CONTAINER COMMAND [ARG ...]
- doker ps [OPCJE]
- dzienniki dokerów [OPCJE] POJEMNIK
- doker sprawdź [OPCJE] POJEMNIK | OBRAZ [POJEMNIK | OBRAZ ...]
Uwagi
- W powyższych przykładach ilekroć kontener jest parametrem polecenia dokera, jest on wymieniony jako
<container>
lubcontainer id
lub<CONTAINER_NAME>
. We wszystkich tych miejscach możesz podać nazwę kontenera lub identyfikator kontenera, aby określić kontener.
Wykaz pojemników
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
samodzielnie drukuje tylko aktualnie uruchomione kontenery. Aby wyświetlić wszystkie kontenery (w tym zatrzymane), użyj flagi -a
:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Aby wyświetlić listę kontenerów o określonym statusie, użyj opcji wiersza polecenia -f
aby przefiltrować wyniki. Oto przykład wylistowania wszystkich kontenerów, które opuściły:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
Możliwe jest również wyświetlenie tylko identyfikatorów kontenerów za pomocą przełącznika -q
. To bardzo ułatwia obsługę wyniku za pomocą innych narzędzi uniksowych (takich jak grep
i awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Podczas uruchamiania kontenera z docker run --name mycontainer1
podajesz konkretną nazwę, a nie losową nazwę (w formie mood_famous, np. Nostalgic_stallman), i można łatwo je znaleźć za pomocą takiego polecenia
docker ps -f name=mycontainer1
Odwoływanie się do kontenerów
Polecenia dokera, które przyjmują nazwę kontenera, akceptują trzy różne formy:
Rodzaj | Przykład |
---|---|
Pełny UUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
Krótki UUID | 9cc69f11a0f7 |
Nazwa | berserk_wozniak |
Użyj docker ps
aby wyświetlić te wartości dla kontenerów w systemie.
Identyfikator UUID jest generowany przez Docker i nie można go modyfikować. Możesz podać nazwę kontenera, gdy go uruchomisz, docker run --name <given name> <image>
. Docker wygeneruje losową nazwę kontenera, jeśli nie zostanie podana podczas uruchamiania kontenera.
UWAGA : Wartość UUID (lub „krótkiego” UUID) może mieć dowolną długość, o ile podana wartość jest unikalna dla jednego kontenera
Uruchamianie i zatrzymywanie pojemników
Aby zatrzymać działający kontener:
docker stop <container> [<container>...]
Spowoduje to wysłanie głównego procesu w kontenerze SIGTERM, a następnie SIGKILL, jeśli nie zatrzyma się w okresie karencji. Nazwa każdego pojemnika jest drukowana po zatrzymaniu.
Aby uruchomić zatrzymany kontener:
docker start <container> [<container>...]
Spowoduje to uruchomienie każdego kontenera przekazanego w tle; nazwa każdego pojemnika jest drukowana od samego początku. Aby uruchomić kontener na pierwszym planie, przekaż flagę -a
( --attach
).
Wyświetl listę kontenerów w niestandardowym formacie
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Znalezienie określonego pojemnika
docker ps --filter name=myapp_1
Znajdź adres IP kontenera
Aby znaleźć adres IP swojego kontenera, użyj:
docker inspect <container id> | grep IPAddress
lub użyj inspekcji dokera
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Ponowne uruchamianie kontenera dokowanego
docker restart <container> [<container>...]
Opcja --time: Sekundy czekać na przystanku przed zabiciem pojemnik (domyślnie 10)
docker restart <container> --time 10
Usuń, usuń i wyczyść pojemniki
docker rm
może być użyty do usunięcia określonych kontenerów, takich jak ten:
docker rm <container name or id>
Aby usunąć wszystkie kontenery, możesz użyć tego wyrażenia:
docker rm $(docker ps -qa)
Domyślnie doker nie usuwa działającego kontenera. Każdy działający kontener wygeneruje komunikat ostrzegawczy i nie zostanie usunięty. Wszystkie inne pojemniki zostaną usunięte.
Alternatywnie możesz użyć xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Gdzie docker ps -aq -f status=exited
zwróci listę identyfikatorów kontenerów o statusie „Opuszczono”.
Ostrzeżenie: wszystkie powyższe przykłady usuwają tylko „zatrzymane” pojemniki.
Aby usunąć kontener, niezależnie od tego, czy jest zatrzymany, możesz użyć flagi wymuszenia -f
:
docker rm -f <container name or id>
Aby usunąć wszystkie kontenery, niezależnie od stanu:
docker rm -f $(docker ps -qa)
Jeśli chcesz usunąć tylko kontenery ze statusem dead
:
docker rm $(docker ps --all -q -f status=dead)
Jeśli chcesz usunąć tylko kontenery o statusie exited
:
docker rm $(docker ps --all -q -f status=exited)
Są to wszystkie permutacje filtrów używanych podczas wyświetlania kontenerów .
Aby usunąć zarówno niechciane kontenery, jak i wiszące obrazy, które używają miejsca po wersji 1.3 , użyj następujących poleceń (podobnie do narzędzia uniksowego df
):
$ docker system df
Aby usunąć wszystkie nieużywane dane:
$ docker system prune
Uruchom polecenie na już istniejącym kontenerze dokera
docker exec -it <container id> /bin/bash
Często loguje się już działający kontener, aby wykonać szybkie testy lub zobaczyć, co robi aplikacja. Często oznacza to złe praktyki korzystania z kontenerów z powodu dzienników, a zmienione pliki należy umieszczać w woluminach. Ten przykład pozwala nam zalogować się do kontenera. To zakłada, że / bin / bash jest dostępny w kontenerze, może to być / bin / sh lub coś innego.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Ten przykład archiwizuje zawartość katalogu danych w tar. Następnie z docker cp
możesz go odzyskać.
Dzienniki kontenerowe
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Na przykład:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Połącz się z instancją działającą jako demon
Istnieją dwa sposoby osiągnięcia tego, pierwszy i najbardziej znany to:
docker attach --sig-proxy=false <container>
Ten dosłownie dołącza twoją bash do bash kontenera, co oznacza, że jeśli masz działający skrypt, zobaczysz wynik.
Aby odłączyć, po prostu wpisz: Ctl-P Ctl-Q
Ale jeśli potrzebujesz bardziej przyjaznego sposobu i aby móc tworzyć nowe instancje bash, po prostu uruchom następujące polecenie:
docker exec -it <container> bash
Kopiowanie pliku z / do kontenerów
od kontenera do hosta
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
od hosta do kontenera
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Jeśli użyję jess / transmisji z
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, pliki w kontenerze znajdują się w / transmisja / pobieranie
a mój bieżący katalog na hoście to / home / $ USER / abc, po
docker cp transmission_id_or_name:/transmission/download .
Pliki zostaną skopiowane do
/home/$USER/abc/transmission/download
nie możesz, używając programu docker cp
skopiuj tylko jeden plik, skopiuj drzewo katalogów i pliki
Usuń, usuń i wyczyść woluminy dokerów
Woluminy dokerów nie są automatycznie usuwane po zatrzymaniu kontenera. Aby usunąć powiązane woluminy po zatrzymaniu kontenera:
docker rm -v <container id or name>
Jeśli nie podano flagi -v
, wolumin pozostaje na dysku jako „wolumin wiszący”. Aby usunąć wszystkie wiszące woluminy:
docker volume rm $(docker volume ls -qf dangling=true)
Filtr docker volume ls -qf dangling=true
zwróci listę nazw woluminów docker volume ls -qf dangling=true
, w tym nieoznaczonych, które nie są dołączone do kontenera.
Alternatywnie możesz użyć xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Eksportuj i importuj systemy plików kontenerów Docker
Możliwe jest zapisanie zawartości systemu plików kontenera Docker do pliku archiwum tarball. Jest to przydatne w przypadku szczypania do przenoszenia systemów plików kontenera na różne hosty, na przykład jeśli kontener bazy danych zawiera ważne zmiany i nie jest możliwe, aby replikować te zmiany w innym miejscu. Należy pamiętać, że lepiej jest utworzyć całkowicie nowy kontener ze zaktualizowanego obrazu za pomocą polecenia docker run
docker-compose.yml
pliku docker-compose.yml
, zamiast eksportować i przenosić system plików kontenera. Częścią siły Dockera jest sprawdzalność i rozliczalność deklaratywnego stylu tworzenia obrazów i kontenerów. Używając docker export
i docker import
, ta moc jest stłumiona z powodu zaciemnienia zmian wprowadzonych w systemie plików kontenera z jego pierwotnego stanu.
docker export -o redis.tar redis
Powyższe polecenie utworzy pusty obraz, a następnie wyeksportuje system plików kontenera redis
do tego pustego obrazu. Aby zaimportować z archiwum tarball, użyj:
docker import ./redis.tar redis-imported:3.0.7
To polecenie utworzy redis-imported:3.0.7
, z którego można tworzyć kontenery. Możliwe jest również tworzenie zmian podczas importu, a także ustawienie komunikatu zatwierdzenia:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Dyrektywy Dockerfile dostępne do użytku z -c
opcji wiersza poleceń są CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.