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ć
- Wybierz Docker lub Podman; polecenia są takie same, różni się tylko nazwa programu.
- Wybierz zadanie po lewej, np. Otwórz powłokę, Pokaż logi lub Zwolnij miejsce na dysku.
- Uzupełnij nazwę kontenera i opcje. Wpisana nazwa przenosi się do pozostałych zadań.
- 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