Generator poleceń Dockera i Podmana

Codzienne polecenia docker i podman: powłoka, logi, exec, run, build, compose.

O tym narzędziu

Wybierz, co chcesz zrobić, np. otworzyć powłokę w kontenerze, śledzić jego logi, uruchomić polecenie, skopiować pliki, zbadać go, zbudować lub wyczyścić obrazy albo sterować Docker Compose, i otrzymaj dokładne polecenie docker lub podman z wyjaśnieniem każdej flagi. Kreator run potrafi też zamienić kontener w plik Compose, a wklejone polecenia run można importować i edytować.

Jak z tego korzystać

  1. Wybierz Docker lub Podman; polecenia są takie same, różni się tylko nazwa programu.
  2. Wybierz zadanie po lewej, np. Otwórz powłokę, Pokaż logi lub Zwolnij miejsce na dysku.
  3. Uzupełnij nazwę kontenera i opcje. Wpisana nazwa przenosi się do pozostałych zadań.
  4. Skopiuj polecenie i przeczytaj, co robi każda jego część. Dla opcji Uruchom nowy kontener możesz też uzyskać plik Compose.

Pytania

Jak uzyskać powłokę w działającym kontenerze?
Uruchom docker exec -it CONTAINER sh. Użyj bash zamiast sh, jeśli obraz go zawiera; obrazy slim i Alpine zwykle mają tylko sh. Wpisz exit, aby wyjść bez zatrzymywania kontenera.
Jak śledzić logi kontenera?
docker logs -f --tail 100 CONTAINER pokazuje ostatnie 100 linii i dalej śledzi nowe. Dodaj --since 10m, aby zobaczyć tylko najnowsze linie, i przepuść wynik przez grep -i --line-buffered error, aby filtrować linie na bieżąco.
Jak zamienić polecenie docker run na docker compose?
Wklej polecenie w pole importu i przełącz wynik na Plik Compose. Porty, woluminy, zmienne środowiskowe, polityka restartu, sieć i limity zasobów są przenoszone.
Co oznacza -p 8080:80?
Liczba po lewej to port na Twoim komputerze, a po prawej – port wewnątrz kontenera. Poprzedź ją prefiksem 127.0.0.1:, aby port był dostępny tylko z Twojego komputera.
Czym różni się nazwany wolumin od bind mount?
Bind mount, np. ./data:/data, mapuje folder z Twojego komputera. Nazwany wolumin, np. pgdata:/var/lib/postgresql/data, to przestrzeń zarządzana przez Dockera, która przetrwa usunięcie kontenera; to typowy wybór dla baz danych.
Czy polecenia Dockera i Podmana są takie same?
Prawie: podman run przyjmuje te same flagi. Główne różnice to domyślny tryb rootless, przez co porty hosta poniżej 1024 wymagają dodatkowej konfiguracji, oraz to, że w systemach z SELinux montowania bind często wymagają :Z.
Czy podawać hasła we flagach -e?
Trafiają do historii powłoki i do docker inspect. Do czegokolwiek poza testami lokalnymi używaj pliku --env-file trzymanego poza systemem kontroli wersji albo funkcji sekretów swojej platformy.
Jak znaleźć adres IP kontenera?
Wybierz Zbadaj kontener i opcję Adres IP: narzędzie napisze za Ciebie szablon docker inspect --format. Adres IP rzadko jest jednak potrzebny. Kontenery w tej samej sieci zdefiniowanej przez użytkownika lub w tym samym projekcie Compose łączą się ze sobą po nazwie, np. db:5432, a IP może się zmieniać przy każdym odtworzeniu kontenera.
Czy mogę skopiować pliki z zatrzymanego kontenera?
Tak. docker cp CONTAINER:/var/log/app.log ./ działa niezależnie od tego, czy kontener jest uruchomiony, czy zatrzymany, co przydaje się do wyciągania logów lub zrzutów po awarii. Kopiuje też całe foldery. Użyj Kopiuj pliki do i z kontenera, aby dostać polecenie dla dowolnego kierunku.
Czym różni się docker stop od docker kill?
docker stop wysyła SIGTERM, czeka 10 sekund (zmienisz to przez -t), a potem wysyła SIGKILL. docker kill od razu wysyła SIGKILL, bez szansy na sprzątanie. Jeśli stop zawsze trwa pełne 10 sekund, Twój program prawdopodobnie ignoruje SIGTERM, często dlatego, że jako proces 1 działa powłoka, która nie przekazuje sygnału dalej.

docker exec a docker run: czym się różnią?

docker run tworzy nowy kontener z obrazu i go uruchamia. docker exec uruchamia polecenie wewnątrz kontenera, który już działa. Częsty błąd to docker run -it nginx bash, żeby „wejść” do serwera: uruchamia to świeży kontener obok prawdziwego, a wszystko, co tam zmienisz, znika. Bez --rm każda taka próba zostawia też zatrzymany kontener, który pokaże docker ps -a.

docker exec działa tylko wtedy, gdy kontener jest uruchomiony, więc nie pomoże przy kontenerze, który pada przy starcie. Najpierw przeczytaj docker logs --tail 50 CONTAINER. Potem uruchom obraz z powłoką zamiast jego zwykłego programu: docker run -it --rm --entrypoint sh IMAGE. Kreator docker run ma do tego pola Entrypoint i Polecenie w sekcji Więcej opcji.

Jak zwolnić miejsce na dysku zajmowane przez Dockera?

Zacznij od docker system df, które pokazuje, ile miejsca zajmują obrazy, kontenery, lokalne woluminy i cache budowania. docker image prune usuwa tylko wiszące obrazy (dangling), czyli nieotagowane pozostałości po przebudowach. docker image prune -a usuwa każdy obraz, którego nie używa żaden kontener, więc następnym razem pobierzesz je ponownie. docker container prune usuwa zatrzymane kontenery, co zwalnia też ich zapisywalne warstwy.

Uważaj z woluminami: przechowują pliki baz danych i przesłane pliki. docker volume prune usuwa woluminy nieużywane przez żaden kontener, a w Dockerze 23 i nowszym usuwa tylko anonimowe woluminy, chyba że dodasz -a. docker system prune -a --volumes czyści za jednym razem prawie wszystko, co nieużywane. Polecenia prune proszą o potwierdzenie, chyba że dodasz -f, a nic nie trafia do kosza, więc przeczytaj pytanie, zanim potwierdzisz.

Polityki restartu w Dockerze: unless-stopped czy always?

Przy --restart always Docker restartuje kontener za każdym razem, gdy ten się zakończy, a także przy starcie demona Dockera, nawet jeśli kontener został wcześniej zatrzymany ręcznie. unless-stopped działa tak samo, z tym że kontener zatrzymany przez Ciebie pozostaje zatrzymany po restarcie systemu. on-failure restartuje tylko po niezerowym kodzie wyjścia. Domyślne no nigdy nie restartuje. Dla długo działających usług właściwym wyborem jest zwykle unless-stopped.

W pliku Compose to samo ustawienie to restart: unless-stopped. Wartość „no” trzeba ująć w cudzysłowy, bo starsze parsery YAML czytają samo no jako false, a generowany tutaj wynik Compose robi to za Ciebie. Podman działa inaczej: nie ma stale działającego demona, więc kontenery z polityką restartu wracają po restarcie systemu tylko wtedy, gdy włączona jest usługa podman-restart albo gdy uruchamiasz je pod systemd.

Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem