🐳 Docker
Docker to platforma do uruchamiania aplikacji w odizolowanych kontenerach. Ta ściągawka zawiera polecenia do pracy z obrazami, kontenerami, sieciami, wolumenami, a także Docker Compose i Swarm.
📦 Podstawowe polecenia
Polecenie |
Przykład |
Opis |
|---|---|---|
docker |
Główne polecenie CLI Dockera używane do uruchamiania podpoleceń i zarządzania kontenerami, obrazami, sieciami i wolumenami | |
docker version |
Wyświetl zainstalowaną wersję Dockera (klient i serwer). Przydatne do weryfikacji instalacji | |
docker version --format '{{.Client.APIVersion}}' |
Pokaż tylko wersję API klienta Dockera |
|
docker version --format '{{.Server.Version}}' |
Pokaż tylko wersję serwera Dockera (Engine) |
|
docker version --format '{{json .}}' |
Wyświetl pełną informację o wersji w formacie JSON |
|
docker system info |
Wyświetl ogólne informacje o systemie Docker: liczba kontenerów, obrazów, zasobów | |
docker info |
Pokaż dane Dockera: wersje, sieci, liczbę kontenerów i obrazów |
|
docker info --format '{{json .}}' |
Wyjście w formacie JSON — przydatne do automatyzacji |
|
docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' |
Pokaż liczbę CPU i całkowitą pamięć |
|
docker info --format '{{.Driver}}' |
Pokaż sterownik przechowywania używany przez Dockera |
|
docker image pull |
Pobierz obraz z Docker Hub lub innego rejestru. Kontenery nie mogą działać bez obrazów | |
docker pull ubuntu |
Pobierz najnowszy dostępny obraz Ubuntu |
|
docker pull nginx:alpine |
Pobierz lekki obraz Nginx oparty na Alpine Linux |
|
docker pull redis:7 |
Pobierz obraz Redis w wersji 7 |
|
docker container run |
Utwórz i uruchom nowy kontener z obrazu | |
docker run -it ubuntu bash |
Uruchom Ubuntu z interaktywnym terminalem Bash |
|
docker run -d nginx |
Uruchom Nginx w trybie odłączonym (w tle) |
|
docker run -p 8080:80 nginx |
Uruchom Nginx i zbindowaj port kontenera 80 do portu hosta 8080 |
|
docker container ls |
Wyświetl działające kontenery | |
docker ps |
Pokaż tylko działające kontenery |
|
docker ps -a |
Pokaż wszystkie kontenery, w tym zatrzymane |
|
docker ps --format '{{.Names}}' |
Wyświetl tylko nazwy kontenerów |
|
docker container start |
Uruchom jeden lub więcej zatrzymanych kontenerów | |
docker start container_name |
Uruchom kontener po nazwie |
|
docker start $(docker ps -aq) |
Uruchom wszystkie kontenery |
|
docker start -ai container_name |
Uruchom kontener i dołącz interaktywny terminal |
|
docker container stop |
Zatrzymaj działający kontener | |
docker stop container_name |
Zatrzymaj kontener po nazwie |
|
docker stop $(docker ps -q) |
Zatrzymaj wszystkie działające kontenery |
|
docker stop -t 5 container_name |
Zatrzymaj kontener dając mu 5 sekund na zakończenie procesów |
|
docker container restart |
Uruchom ponownie kontener | |
docker restart container_name |
Uruchom ponownie określony kontener |
|
docker restart $(docker ps -q) |
Uruchom ponownie wszystkie działające kontenery |
|
docker restart -t 10 container_name |
Uruchom ponownie kontener z opóźnieniem 10 sekund |
|
docker container rm |
Usuń kontener | |
docker rm container_name |
Usuń określony zatrzymany kontener |
|
docker rm $(docker ps -aq) |
Usuń wszystkie zatrzymane kontenery |
|
docker rm -f container_name |
Wymuś usunięcie działającego kontenera |
|
docker image ls |
Wyświetl pobrane obrazy | |
docker images |
Pokaż wszystkie obrazy na hoście |
|
docker images -a |
Pokaż wszystkie obrazy, w tym warstwy pośrednie |
|
docker images --format '{{.Repository}}:{{.Tag}}' |
Wyświetl tylko nazwy i tagi obrazów |
|
docker image rm |
Usuń jeden lub więcej obrazów z lokalnego magazynu | |
docker rmi test1:latest |
Usuń obraz z tagiem |
|
docker rmi 1a2b3c4d5e6f |
Usuń obraz po jego ID |
|
docker rmi $(docker images -q) |
Usuń wszystkie obrazy (używaj ostrożnie!) |
🔁 Zarządzanie kontenerami
Polecenie |
Przykład |
Opis |
|---|---|---|
docker container exec |
Uruchom polecenie wewnątrz działającego kontenera | |
docker exec -it container bash |
Uruchom interaktywną powłokę bash w kontenerze o nazwie |
|
docker exec container ls /app |
Wykonaj polecenie |
|
docker exec -d container touch /tmp/testfile |
Uruchom polecenie w kontenerze w trybie odłączonym (bez oczekiwania) |
|
docker container logs |
Wyświetl logi kontenera | |
docker logs container |
Pokaż wszystkie logi z kontenera |
|
docker logs -f container |
Śledź logi kontenera w czasie rzeczywistym |
|
docker logs --tail 50 container |
Pokaż ostatnie 50 linii logów |
|
docker inspect |
Pobierz szczegółowe informacje JSON o kontenerze lub obrazie | |
docker inspect container |
Wyświetl szczegóły kontenera |
|
docker inspect --format '{{.NetworkSettings.IPAddress}}' container |
Pokaż adres IP kontenera |
|
docker container stats |
Pokaż statystyki użycia zasobów kontenerów w czasie rzeczywistym | |
docker stats |
Wyświetl CPU, pamięć, sieć i dysk dla wszystkich kontenerów |
|
docker stats container_name |
Pokaż statystyki tylko dla konkretnego kontenera |
|
docker stats --no-stream |
Pokaż jednorazowy zrzut statystyk i zakończ |
|
docker container rename |
Zmień nazwę kontenera | |
docker rename old_name new_name |
Zmień nazwę kontenera z |
|
docker container cp |
Kopiuj pliki między kontenerem a hostem | |
docker cp container:/src/file.txt ./file.txt |
Skopiuj plik z kontenera do bieżącego katalogu hosta |
|
docker cp ./config.yaml container:/app/config.yaml |
Skopiuj plik z hosta do kontenera |
|
docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" |
Strumieniuj plik logu z kontenera i filtruj linie z “ERROR” bez zapisywania na dysku |
|
docker container top |
Wyświetl działające procesy w kontenerze | |
docker top container |
Pokaż procesy w kontenerze |
|
docker container pause |
Wstrzymaj wszystkie procesy w kontenerze | |
docker pause container |
Wstrzymaj kontener |
|
docker container unpause |
Wznów wstrzymany kontener | |
docker unpause container |
Wznów kontener |
|
docker container update |
Zaktualizuj ustawienia kontenera bez restartu | |
docker update --memory 500m container |
Ogranicz użycie pamięci kontenera do 500 MB |
🧱 Obrazy i Dockerfile
Polecenie |
Przykład |
Opis |
|---|---|---|
docker buildx build |
Zbuduj obraz Dockera z Dockerfile | |
docker build -t my_image . |
Zbuduj obraz z tagiem |
|
docker build -t my_image:1.0 . |
Zbuduj obraz z tagiem w wersji |
|
docker build --no-cache -t my_image . |
Zbuduj obraz bez używania cache dla czystej kompilacji |
|
docker container commit |
Utwórz obraz z bieżącego stanu kontenera | |
docker commit container my_img:v1 |
Utwórz obraz |
|
docker commit -m "Added config" container my_img:v2 |
Utwórz obraz z komunikatem commit |
|
docker commit -a "John Doe" container my_img:latest |
Utwórz obraz z podanym autorem |
|
docker image tag |
Dodaj lub zmień tag obrazu | |
docker tag my_image myrepo/my_image:latest |
Dodaj tag do wypchnięcia do rejestru |
|
docker tag my_image:1.0 my_image:stable |
Utwórz tag |
|
docker tag my_image my_image:backup |
Dodaj tag |
|
docker image push |
Wypchnij obraz do Docker Hub lub innego rejestru | |
docker push myrepo/my_image:latest |
Wypchnij obraz z tagiem |
|
docker push myrepo/my_image:1.0 |
Wypchnij obraz z tagiem |
|
docker push myrepo/my_image |
Wypchnij obraz z domyślnym tagiem |
|
docker login |
Zaloguj się do Docker Hub lub innego rejestru | |
docker login |
Podaj nazwę użytkownika i hasło interaktywnie dla Docker Hub |
|
docker login myregistry.local:5000 |
Zaloguj się do prywatnego rejestru |
|
docker login -u username -p password |
Zaloguj się przy użyciu nazwy użytkownika i hasła (niezalecane) |
|
docker logout |
Wyloguj się z Docker Hub lub innego rejestru | |
docker logout |
Wyloguj się z Docker Hub |
|
docker logout myregistry.local:5000 |
Wyloguj się z prywatnego rejestru |
|
HEALTHCHECK |
Instrukcja Dockerfile do automatycznego sprawdzania stanu kontenera | |
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 |
Dodaj test zdrowia sprawdzający dostępność usługi co 30 sekund |
|
docker inspect --format='{{json .State.Health}}' container_name |
Sprawdź status healthcheck działającego kontenera |
🔌 Sieci i wolumeny
Polecenie |
Przykład |
Opis |
|---|---|---|
docker network ls |
Wyświetl wszystkie sieci Dockera | |
docker network ls |
Pokaż wszystkie utworzone sieci Dockera |
|
docker network ls --filter driver=bridge |
Pokaż tylko sieci z driverem |
|
docker network ls --format '{{.Name}}' |
Pokaż tylko nazwy sieci |
|
docker network create |
Utwórz nową sieć Dockera | |
docker network create my_net |
Utwórz sieć |
|
docker network create --driver bridge my_bridge_net |
Utwórz sieć z driverem |
|
docker network create --subnet=192.168.10.0/24 my_custom_net |
Utwórz sieć z określonym subnetem |
|
docker network connect |
Podłącz kontener do sieci | |
docker network connect my_net container |
Podłącz kontener |
|
docker network connect --alias db_net my_net container |
Podłącz z aliasem |
|
docker network disconnect |
Odłącz kontener od sieci | |
docker network disconnect my_net container |
Odłącz kontener |
|
docker volume ls |
Wyświetl wszystkie wolumeny Dockera | |
docker volume ls |
Pokaż wszystkie wolumeny Dockera |
|
docker volume ls --filter dangling=true |
Pokaż nieużywane wolumeny |
|
docker volume create |
Utwórz nowy wolumen Dockera | |
docker volume create my_vol |
Utwórz wolumen o nazwie |
|
docker volume create --driver local --opt type=tmpfs my_tmp_vol |
Utwórz tymczasowy wolumen przy użyciu tmpfs |
|
docker volume inspect |
Pokaż szczegółowe informacje o wolumenie | |
docker volume inspect my_vol |
Wyświetl szczegóły wolumenu |
|
docker volume rm |
Usuń jeden lub więcej wolumenów | |
docker volume rm my_vol |
Usuń wolumen o nazwie |
|
docker volume rm $(docker volume ls -qf dangling=true) |
Usuń wszystkie nieużywane wolumeny |
🧩 Wtyczki Dockera
Polecenie |
Przykład |
Opis |
|---|---|---|
docker plugin ls |
Wyświetl zainstalowane wtyczki Dockera | |
docker plugin ls |
Wyświetl wszystkie wtyczki i ich status |
|
docker plugin install |
Zainstaluj wtyczkę Dockera z rejestru | |
docker plugin install vieux/sshfs |
Zainstaluj wtyczkę wolumenu SSHFS |
|
docker plugin install store/weaveworks/net-plugin:latest_release |
Zainstaluj wtyczkę sieciową Weave |
|
docker plugin disable |
Wyłącz zainstalowaną wtyczkę | |
docker plugin disable vieux/sshfs |
Wyłącz wtyczkę SSHFS |
|
docker plugin enable |
Włącz wcześniej wyłączoną wtyczkę | |
docker plugin enable vieux/sshfs |
Włącz wtyczkę SSHFS |
|
docker plugin rm |
Usuń wtyczkę Dockera | |
docker plugin rm vieux/sshfs |
Usuń wtyczkę SSHFS |
📋 Docker Compose
Polecenie |
Przykład |
Opis |
|---|---|---|
docker compose up |
Uruchom kontenery zdefiniowane w docker-compose.yml |
|
docker compose up |
Uruchom wszystkie usługi w bieżącym katalogu w trybie interaktywnym |
|
docker compose up -d |
Uruchom usługi w trybie odłączonym (w tle) |
|
docker compose up --build |
Zbuduj obrazy przed uruchomieniem usług |
|
docker compose down |
Zatrzymaj i usuń kontenery, sieci i wolumeny utworzone przez up |
|
docker compose down |
Zatrzymaj wszystkie uruchomione usługi i usuń powiązane zasoby |
|
docker compose down --volumes |
Usuń także wolumeny utworzone przez Compose |
|
docker compose down --rmi all |
Usuń także obrazy utworzone przez Compose |
|
docker compose logs |
Wyświetl logi wszystkich lub wybranych usług | |
docker compose logs |
Pokaż logi wszystkich usług |
|
docker compose logs -f |
Śledź logi w czasie rzeczywistym |
|
docker compose logs web |
Pokaż logi tylko dla usługi |
|
docker compose exec |
Uruchom polecenie w działającym kontenerze usługi | |
docker compose exec web bash |
Wejdź do interaktywnej powłoki bash w kontenerze usługi |
|
docker compose exec db ls /var/lib/postgresql |
Uruchom polecenie |
|
docker compose exec -d worker touch /tmp/done |
Uruchom polecenie w kontenerze |
|
docker compose build |
Buduj lub przebudowuj obrazy usług | |
docker compose build |
Zbuduj wszystkie obrazy zdefiniowane w |
|
docker compose build web |
Zbuduj tylko obraz usługi |
|
docker compose build --no-cache |
Buduj obrazy bez użycia cache |
|
docker compose ps |
Pokaż status wszystkich usług i kontenerów | |
docker compose ps -a |
Pokaż wszystkie kontenery, w tym zatrzymane |
|
docker compose ps --services |
Pokaż tylko nazwy usług |
|
docker compose pull |
Pobierz/zaktualizuj obrazy usług z rejestru | |
docker compose pull web |
Pobierz obraz tylko dla usługi |
|
docker compose pull --ignore-pull-failures |
Kontynuuj pobieranie nawet jeśli niektóre obrazy się nie powiodą |
|
docker compose restart |
Uruchom ponownie wszystkie lub wybrane usługi | |
docker compose restart db |
Uruchom ponownie tylko usługę |
|
docker compose restart -t 10 |
Uruchom ponownie usługi z 10-sekundowym limitem czasu |
|
docker compose config |
Wyświetl końcową konfigurację Compose w formacie YAML | |
docker compose config --services |
Wypisz wszystkie usługi w konfiguracji |
|
docker compose config --volumes |
Wypisz wszystkie wolumeny zdefiniowane w konfiguracji |
|
docker compose start |
Uruchom zatrzymane usługi bez ponownego tworzenia kontenerów | |
docker compose start web |
Uruchom usługę |
|
docker compose start db api |
Uruchom wiele usług naraz |
|
docker compose stop |
Zatrzymaj usługi bez usuwania kontenerów | |
docker compose stop web |
Zatrzymaj usługę |
|
docker compose stop -t 5 |
Zatrzymaj usługi z 5-sekundowym limitem czasu |
📤 Eksport i Import
Polecenie |
Przykład |
Opis |
|---|---|---|
docker image save |
Zapisz jeden lub więcej obrazów Dockera do archiwum tar w celu późniejszego importu lub transferu | |
docker save -o image.tar my_img:tag |
Zapisz obraz Dockera do pliku archiwum tar |
|
docker save my_image > my_image.tar |
Alternatywny sposób zapisania obrazu do pliku |
|
docker save -o redis_latest.tar redis:latest |
Zapisz określony obraz Redis do pliku |
|
docker image load |
Wczytaj obrazy Dockera z wcześniej zapisanego archiwum tar | |
docker load < image.tar |
Wczytaj obraz Dockera z pliku archiwum tar |
|
docker load --input redis_latest.tar |
Wczytaj obraz wskazując plik przez parametr |
|
docker load --quiet < my_image.tar |
Wczytaj obraz bez pokazywania postępu |
|
docker container export |
Eksportuj system plików kontenera jako archiwum tar bez historii obrazu i metadanych | |
docker export container > file.tar |
Eksportuj system plików kontenera do archiwum |
|
docker export my_container > my_container_fs.tar |
Eksportuj kontener po nazwie |
|
docker export -o container_fs.tar container_id |
Eksportuj po ID kontenera używając flagi |
|
docker image import |
Utwórz nowy obraz z archiwum tar systemu plików | |
docker import file.tar new_img |
Zaimportuj plik archiwum jako nowy obraz Dockera |
|
docker import https://example.com/image.tar my_new_image |
Zaimportuj obraz bezpośrednio z URL |
|
docker import - my_image < file.tar |
Zaimportuj ze standardowego wejścia |
🧹 Czyszczenie i diagnostyka
Polecenie |
Przykład |
Opis |
|---|---|---|
docker system df |
Pokaż użycie dysku przez Dockera: wolumeny, obrazy, kontenery i pamięć podręczną build | |
docker system df -v |
Szczegółowe wyjście z informacjami o każdym obrazie, kontenerze i wolumenie |
|
docker system df --format '{{json .}}' |
Wyjście w formacie JSON |
|
docker system prune |
Usuń wszystkie nieużywane dane Dockera: zatrzymane kontenery, nieużywane sieci, wiszące obrazy i pamięć podręczną build | |
docker system prune -a |
Usuń nieużywane obrazy, w tym pośrednie |
|
docker system prune --volumes |
Usuń nieużywane wolumeny wraz z innymi zasobami |
|
docker image prune |
Usuń nieużywane obrazy Dockera, w tym wiszące warstwy | |
docker image prune -a |
Usuń wszystkie nieużywane obrazy, w tym wiszące |
|
docker image prune --filter "until=24h" |
Usuń obrazy starsze niż 24 godziny |
|
docker container prune |
Usuń zatrzymane kontenery pasujące do filtrów lub wszystkie, jeśli nie podano filtrów | |
docker container prune --filter "until=24h" |
Usuń zatrzymane kontenery starsze niż 24 godziny |
|
docker container prune --force |
Usuń bez pytania o potwierdzenie |
🐝 Docker Swarm
Polecenie |
Przykład |
Opis |
|---|---|---|
docker swarm init |
Zainicjuj nowy klaster Docker Swarm na bieżącym węźle | |
docker swarm init --advertise-addr 192.168.1.100 |
Zainicjuj klaster podając adres IP |
|
docker swarm init --listen-addr 0.0.0.0:2377 |
Zainicjuj z określonym portem nasłuchiwania |
|
docker service create |
Utwórz nową usługę w klastrze Swarm | |
docker service create --name nginx nginx |
Utwórz usługę Nginx w Swarm |
|
docker service create --replicas 3 --name web webserver |
Utwórz usługę z 3 replikami |
|
docker service create --name redis --publish 6379:6379 redis |
Utwórz usługę z mapowaniem portów |
|
docker stack deploy |
Wdróż stos usług do klastra Swarm na podstawie pliku Compose | |
docker stack deploy -c docker-compose.yml mystack |
Wdróż stos z pliku compose |
|
docker stack deploy --with-registry-auth -c compose.yml mystack |
Wdróż z przekazywaniem uwierzytelnienia rejestru |
|
docker stack deploy -c swarm-compose.yml mystack |
Użyj alternatywnego pliku compose dla stosu |
|
docker stack rm |
Usuń jeden lub więcej stosów z klastra Swarm | |
docker stack rm mystack |
Usuń stos |
|
docker stack rm |
Usuń wszystkie stosy (niezalecane) |
|
docker stack rm mystack && docker swarm leave --force |
Usuń stos i opuść Swarm |
💼 Zaawansowane użycie Dockera
🚀 Profesjonalne polecenia Dockera
Polecenie |
Przykład |
Opis |
|---|---|---|
docker buildx |
Zaawansowane narzędzie do budowania obrazów zastępujące docker build. Obsługuje multi-platformę, cache, budowanie równoległe i eksport do różnych formatów. Przydatne dla CI/CD i rozwoju wieloplatformowego |
|
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . |
Zbuduj obraz wieloplatformowy (ARM i x86 jednocześnie) |
|
docker buildx build --load -t localimg . |
Zbuduj obraz i załaduj go do lokalnego cache Dockera |
|
docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . |
Zbuduj i wypchnij obraz wieloplatformowy do rejestru |
|
docker context |
Zarządzaj kontekstami Dockera do pracy ze zdalnymi lub wieloma środowiskami. Umożliwia szybkie przełączanie między lokalnym a zdalnym Docker Engine | |
docker context create myremote --docker "host=ssh://user@host" |
Utwórz kontekst do połączenia ze zdalnym hostem Dockera |
|
docker context use myremote |
Przełącz na zdalny kontekst |
|
docker context ls |
Wyświetl dostępne konteksty i aktywny |
|
docker system events |
Nasłuchuj zdarzeń Dockera w czasie rzeczywistym, z filtrowaniem po typie zdarzeń (np. uruchomienie kontenera). Przydatne do monitorowania i automatyzacji | |
docker events --filter 'event=start' |
Pokaż tylko zdarzenia uruchomienia kontenerów |
|
docker events --since 1h --until 10m |
Pokaż zdarzenia z ostatniej godziny do 10 minut temu |
|
docker events --filter 'type=network' |
Pokaż tylko zdarzenia sieciowe |
|
docker events --filter 'image=nginx' |
Pokaż zdarzenia związane z obrazem |
|
docker container update |
Zmień limity zasobów i ustawienia działającego kontenera bez restartu | |
docker update --cpus 2 --memory 1g my_container |
Ustaw limit na 2 CPU i 1 GB RAM |
|
docker update --restart unless-stopped my_container |
Ustaw politykę automatycznego restartu na |
|
docker update --pids-limit 200 my_container |
Ogranicz liczbę procesów do 200 |
|
docker container diff |
Pokaż zmiany systemu plików w kontenerze w porównaniu do jego pierwotnego obrazu. Przydatne do debugowania i audytu | |
docker diff my_container |
Pokaż wszystkie zmiany w systemie plików kontenera |
|
docker diff my_container | grep '^A' |
Pokaż tylko dodane pliki ( |
|
docker image history |
Wyświetl historię warstw obrazu: polecenia budowy, rozmiar każdej warstwy i czas utworzenia. Przydatne do optymalizacji i audytu | |
docker history my_image |
Pokaż historię warstw obrazu |
|
docker history --no-trunc my_image |
Pokaż pełne polecenia budowy bez skracania |
|
docker history --format "{{.CreatedBy}}: {{.Size}}" my_image |
Wyświetl tylko polecenia budowy i rozmiary warstw |
🛠 Przydatne praktyki Dockera i automatyzacja
Minimalizuj rozmiar obrazu
Używaj bazowych obrazów takich jakalpinelubscratchdla minimalnego rozmiaru.
Aby spłaszczyć warstwy, możesz użyć--squashpodczas budowy (wymaga włączonych funkcji eksperymentalnych).
Usuń także pliki tymczasowe i cache w jednej warstwie:RUN apk add --no-cache curl && rm -rf /var/cache/apk/*Minimalizuj liczbę warstw
Łącz polecenia w jednymRUN, aby zmniejszyć liczbę warstw i końcowy rozmiar obrazu:RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*Optymalizuj budowę Dockerfile
Używaj budowy wieloetapowej, aby w końcowym obrazie pozostały tylko potrzebne pliki.
Najpierw kopiuj i instaluj zależności, potem kod — poprawia to cache warstw i przyspiesza przebudowę.Oddzielaj sekrety i konfiguracje
Nigdy nie przechowuj plików.env, kluczy API ani prywatnych certyfikatów w obrazie.
Używaj do konfiguracji:docker secret(w Swarm)
- zmienne środowiskowe (
-e VAR=valuelub.env)
zewnętrzne wolumeny dla konfiguracji
Sekrety w czasie budowy (BuildKit)
Do bezpiecznego przekazywania sekretów podczas budowy użyj flagi--secret:docker buildx build --secret id=mysecret,src=./secret.txt .W Dockerfile sekret jest dostępny pod
/run/secrets/mysecret:RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret🛡 To zapobiega przechowywaniu sekretów w warstwach obrazu.
Rootless Docker
Uruchamianie Dockera bez uprawnień root zwiększa bezpieczeństwo i zmniejsza ryzyko kompromitacji hosta.
Aby włączyć:dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATHSprawdź:
docker info | grep Rootless⚠ Niektóre funkcje (np. przekierowanie portów <1024) będą niedostępne.
Skanuj obrazy pod kątem podatności
Użyj wbudowanych narzędzi:docker scan my_imageLub nowego CLI:
docker scout cves my_imageTo pomaga wykrywać podatności w obrazach bazowych i zależnościach.
Monitoruj użycie zasobów
Ograniczaj kontenery pamięcią, CPU i liczbą procesów:docker run --memory=512m --cpus="1.5" --pids-limit=200 myimageZapobiega to nadmiernemu zużyciu zasobów.
Możesz także ograniczać I/O:docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimagePrzydatne dla kontenerów, które nie powinny przeciążać podsystemu dyskowego.
Automatyczne czyszczenie
Regularnie usuwaj nieużywane obrazy, kontenery, wolumeny i sieci:docker system prune -af --volumes⚠ Uważaj: to polecenie usuwa wszystkie nieużywane zasoby.
Do selektywnego czyszczenia używaj:
docker image prune --filter "until=24h"Integracja CI/CD
Osadź budowanie, testy i wdrażanie w GitHub Actions, GitLab CI, Jenkins pipelines.
Przykładowy krok GitHub Actions:- run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}Logowanie i monitorowanie
Podłącz sterowniki logowania (--log-driver) do scentralizowanych systemów: ELK, Loki, Splunk.
Używaj Prometheus + cAdvisor do metryk kontenerów.Wdrożenie produkcyjne
Oddziel konfiguracje dla developmentu i produkcji używającdocker-compose.override.yml.
Dla wysokiej dostępności i skalowania używaj:- Docker Swarm
Kubernetes
- Docker Swarm
🐞 Debugowanie i profilowanie kontenerów Dockera
Polecenie |
Przykład |
Opis |
|---|---|---|
docker container exec |
Uruchamia polecenie wewnątrz działającego kontenera, zapewniając interaktywny dostęp lub możliwość uruchamiania procesów w odizolowanym środowisku kontenera | |
docker exec -it my_container bash |
Uruchom interaktywny terminal (bash) wewnątrz działającego kontenera |
|
docker exec -it my_container sh |
Uruchom minimalną powłokę wewnątrz kontenera (jeśli bash nie jest dostępny) |
|
docker exec my_container ls /app |
Uruchom polecenie w kontenerze bez trybu interaktywnego |
|
docker container logs |
Wyświetla logi określonego kontenera, umożliwiając podgląd wyjścia i zdarzeń związanych z jego działaniem do diagnostyki i monitorowania | |
docker logs -f --tail 100 my_container |
Zobacz ostatnie 100 linii logów z transmisją w czasie rzeczywistym |
|
docker logs my_container |
Pokaż wszystkie dostępne logi kontenera |
|
docker logs --since 1h my_container |
Pokaż logi z ostatniej godziny |
|
docker inspect |
Zwraca szczegółowe informacje o obiekcie Dockera (kontenerze, obrazie, sieci itd.) w formacie JSON, w tym konfigurację i stan | |
docker inspect my_container |
Pobierz pełne informacje JSON o kontenerze |
|
docker inspect --format '{{.State.Pid}}' my_container |
Pobierz PID głównego procesu kontenera na hoście |
|
docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container |
Pokaż adres IP kontenera |
|
nsenter (with strace) |
Narzędzie Linuksa do wchodzenia w przestrzenie nazw innego procesu (tu: kontenera). Używane z strace do śledzenia wywołań systemowych wewnątrz kontenera w celach debugowania |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 |
Wejdź w przestrzenie nazw kontenera i śledź wywołania systemowe procesu 1 |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash |
Otwórz powłokę bash wewnątrz przestrzeni nazw kontenera |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp |
Zobacz otwarte porty wewnątrz kontenera |
|
tcpdump (inside container) |
Konsolowe narzędzie do przechwytywania i analizy ruchu sieciowego. Używane w kontenerze do diagnozowania problemów sieciowych, analizy pakietów i monitorowania połączeń | |
docker exec -it my_container tcpdump -i any |
Przechwyć i analizuj ruch sieciowy wewnątrz kontenera |
|
docker exec -it my_container tcpdump -nn port 80 |
Przechwyć ruch tylko na porcie 80 |
|
docker exec -it my_container tcpdump -w /tmp/dump.pcap |
Zapisz ruch do pliku do późniejszej analizy |
|
docker container stats |
Pokazuje bieżące metryki użycia zasobów (CPU, pamięć, sieć, dysk) dla jednego lub wielu kontenerów w czasie rzeczywistym | |
docker stats my_container |
Wyświetl w czasie rzeczywistym użycie CPU, pamięci, sieci i dysku przez kontener |
|
docker stats |
Pokaż statystyki dla wszystkich kontenerów |
|
docker stats --no-stream |
Wyświetl statystyki jednokrotnie i zakończ |
|
docker container top |
Wyświetla listę procesów działających w kontenerze, podobnie jak ps w Linuksie, aby analizować aktywność kontenera |
|
docker top my_container |
Pokaż procesy działające wewnątrz kontenera |
|
docker top my_container aux |
Użyj alternatywnego formatu wyjściowego, jak |
|
docker top my_container -eo pid,cmd |
Pokaż tylko PID i polecenia procesów |
|
docker diff |
Pokazuje zmiany w systemie plików kontenera w porównaniu do obrazu bazowego, wskazując dodane, zmienione lub usunięte pliki | |
docker diff my_container |
Pokaż zmiany w systemie plików kontenera względem obrazu bazowego |
|
docker diff my_container | grep '^A' |
Pokaż tylko dodane pliki ( |
|
docker diff my_container | grep '^C' |
Pokaż tylko zmienione pliki ( |
|
docker cp |
Kopiuje pliki i katalogi między kontenerem a hostem, umożliwiając wymianę danych i tworzenie kopii zapasowych | |
| — | — | — |
docker cp my_container:/path/to/file ./file |
Skopiuj plik z kontenera na hosta |
|
docker cp ./config.yaml my_container:/app/config.yaml |
Skopiuj plik z hosta do kontenera |
|
docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" |
Skopiuj plik logu i przefiltruj linie z błędami bez zapisywania na dysk |
💡 Do zaawansowanego debugowania możesz używać
nsenter,strace,tcpdump,gdbi innych niskopoziomowych narzędzi.
💼 Zaawansowane użycie Docker Compose
🚀 Profesjonalne polecenia Docker Compose
Polecenie |
Przykład |
Opis |
|---|---|---|
docker compose up |
Uruchamia i zarządza cyklem życia określonych usług z pliku docker-compose.yml z możliwością działania w tle | |
docker compose up -d web db |
Uruchom tylko usługi |
|
docker compose up --build |
Przebuduj obrazy przed uruchomieniem usług |
|
docker compose up --remove-orphans |
Usuń kontenery niezdefiniowane w bieżącym pliku compose |
|
docker compose build |
Buduje obrazy dla usług zgodnie z opisem w pliku compose z kontrolą cache i równoległością | |
docker compose build --no-cache |
Przebuduj obrazy całkowicie bez użycia cache |
|
docker compose build --parallel |
Buduj wszystkie usługi równolegle, aby przyspieszyć proces |
|
docker compose build web |
Zbuduj obraz tylko dla usługi |
|
docker compose pull |
Pobiera najnowsze wersje obrazów z rejestru dla wszystkich lub określonych usług | |
docker compose pull |
Pobierz obrazy dla wszystkich usług |
|
docker compose pull db |
Pobierz obraz tylko dla usługi |
|
docker compose pull --ignore-pull-failures |
Kontynuuj wykonywanie ignorując błędy podczas pobierania obrazów |
|
docker compose restart |
Ponownie uruchamia wszystkie lub określone usługi bez ponownego tworzenia kontenerów | |
docker compose restart |
Uruchom ponownie wszystkie usługi w bieżącym projekcie |
|
docker compose restart worker |
Uruchom ponownie tylko usługę |
|
docker compose restart web db |
Uruchom ponownie wiele usług naraz |
|
docker compose exec |
Wykonuje polecenie w działającym kontenerze usługi z opcjonalnym trybem interaktywnym | |
docker compose exec db psql -U user -d database |
Uruchom psql w kontenerze usługi |
|
docker compose exec web sh |
Otwórz powłokę w kontenerze |
|
docker compose exec api curl http://localhost:8080 |
Wykonaj żądanie curl z kontenera usługi |
|
docker compose config |
Wyświetla końcową konfigurację Compose uwzględniając wszystkie pliki i zmienne środowiskowe | |
docker compose config |
Pokaż scaloną konfigurację w formacie YAML |
|
docker compose config --services |
Wypisz wszystkie usługi |
|
docker compose config --environment |
Pokaż wszystkie zmienne środowiskowe używane przez usługi |
|
docker compose watch |
Automatycznie restartuje usługi przy zmianach w plikach źródłowych, przydatne w trakcie developmentu | |
docker compose watch |
Rozpocznij obserwację plików i restartuj usługi przy zmianach |
|
docker compose events |
Strumieniuj zdarzenia Compose: uruchamianie, zatrzymywanie, aktualizacje usług | |
docker compose events --json |
Odbieraj zdarzenia w formacie JSON |
|
docker compose rm |
Usuwa zatrzymane kontenery usług | |
docker compose rm web db |
Usuń kontenery usług |
|
docker compose pause |
Wstrzymaj działanie usług | |
docker compose pause api |
Wstrzymaj usługę |
|
docker compose unpause |
Wznów wstrzymane usługi | |
docker compose unpause api |
Wznów usługę |
|
docker compose create |
Tworzy kontenery bez ich uruchamiania | |
docker compose create web db |
Utwórz kontenery dla |
|
docker compose images |
Pokazuje listę obrazów używanych przez usługi | |
docker compose images |
Wyświetl obrazy wszystkich usług |
|
docker compose top |
Pokazuje procesy działające w kontenerach usług | |
docker compose top web |
Wyświetl procesy w kontenerach usługi |
🛠 Przydatne praktyki i automatyzacja z Docker Compose
Oddzielanie środowisk
Używaj oddzielnych plikówdocker-compose.override.ymldla różnych środowisk —development,staging,production. Pomaga to izolować konfiguracje i unikać konfliktów ustawień.
Możesz też łączyć wiele plików konfiguracyjnych przy pomocy flagi-f:docker compose -f docker-compose.yml -f docker-compose.prod.yml up -dUżywaj różnych plików
.env(.env.dev,.env.proditd.) do zarządzania zmiennymi środowiskowymi.Bezpieczne przechowywanie sekretów
Nie umieszczaj danych wrażliwych (haseł, tokenów) bezpośrednio w plikach Compose. Zamiast tego używaj:- plików
.envdla zmiennych środowiskowych (pamiętaj, że pliki.envnie są szyfrowane i nie powinny trafiać do repozytoriów publicznych)
docker secretidocker configdo bezpiecznego zarządzania sekretami i konfiguracjami w Docker Swarm
- zewnętrznych wolumenów dla plików konfiguracyjnych zawierających sekrety
zewnętrznych systemów zarządzania sekretami (np. HashiCorp Vault, AWS Secrets Manager)
- plików
Kolejność uruchamiania z
depends_onihealthcheck
Aby usługi czekały na gotowość zależności:services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthyMinimalizacja przestoju podczas aktualizacji
Przed aktualizacją usług uruchom:docker compose pull && docker compose up -d --remove-orphansOpcja
-duruchamia kontenery w tle, a--remove-orphansusuwa kontenery niezdefiniowane w bieżących konfiguracjach.
Aby całkowicie zatrzymać i usunąć stare kontenery, jeśli to konieczne:docker compose down --remove-orphansZapewnia to wczytanie świeżych obrazów i usunięcie nieużywanych kontenerów bez przestojów.
Hot Reload kodu w trakcie developmentu
Używajvolumes, aby montować lokalne katalogi w kontenerach. Pozwala to natychmiast zastosować zmiany w kodzie bez przebudowy obrazów.
Zwróć uwagę na problemy z uprawnieniami plików i cache systemu plików, szczególnie w Windows i macOS, aby uniknąć problemów z wydajnością.Hot Reload kodu bez wolumenów (Compose 2.22+)
develop: watch: - path: ./src action: sync target: /appCentralne logowanie usług
Przekierowuj logi kontenerów do systemów monitorowania i agregacji logów, takich jak ELK Stack, Loki, Prometheus i Fluentd, dla łatwej analizy i alertów.
Używaj sterowników logowania Dockera (--log-driver), aby włączyć scentralizowane zbieranie i przetwarzanie logów.
Konfiguruj sterowniki logowania dla kontenerów w Compose:services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"Automatyczny restart usług
Skonfiguruj politykę restartu wdocker-compose.yml:restart: unless-stoppedInne polityki restartu obejmują:
no— brak automatycznego restartu (domyślnie)
always— zawsze restartuj kontener
on-failure— restartuj tylko przy błędach (opcjonalnie z liczbą ponowień)
W produkcji
unless-stoppedto optymalny wybór zapewniający odporność usług.
Umożliwia to automatyczne odzyskiwanie usług po awariach lub restartach hosta.Profile usług
Pozwalają uruchamiać tylko określone grupy usług:services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]Aby uruchomić tylko profil frontend:
docker compose --profile frontend up
🐞 Debugowanie i profilowanie usług w Docker Compose
Polecenie |
Przykład |
Opis |
|---|---|---|
docker compose exec |
Wykonuje polecenie w działającej usłudze, zapewniając dostęp do kontenera lub uruchamianie pojedynczych procesów | |
docker compose exec web sh |
Otwórz powłokę w kontenerze usługi |
|
docker compose exec db psql -U user -d database |
Uruchom polecenie psql w kontenerze usługi |
|
docker compose logs |
Wyświetl logi usług do diagnostyki i monitorowania | |
docker compose logs -f db |
Zobacz logi usługi |
|
docker compose logs --tail=50 api |
Pokaż ostatnie 50 linii logów usługi |
|
docker compose logs --since=1h web |
Pokaż logi z ostatniej godziny dla usługi |
|
docker inspect |
Wyświetl szczegółowe informacje o kontenerze uruchamiającym usługę | |
docker inspect $(docker compose ps -q web) |
Pobierz JSON ze szczegółowymi informacjami o kontenerze usługi |
|
docker container stats |
Monitoruj użycie zasobów kontenerów uruchamiających usługi | |
docker stats $(docker compose ps -q worker) |
Śledź CPU, pamięć i inne zasoby kontenera usługi |
|
docker compose run --rm |
Uruchom tymczasowy kontener z ustawieniami usługi, przydatne do debugowania | |
docker compose run --rm web sh |
Uruchom jednorazowy kontener dla usługi |
|
docker container cp |
Kopiuj pliki między hostem a kontenerem | |
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql |
Skopiuj plik z kontenera usługi |
💡 Do wygodnego debugowania złożonych środowisk wielousługowych używaj
docker compose run --rm, aby uruchamiać pojedyncze kontenery z potrzebnymi sieciami i wolumenami bez wpływu na główne usługi.
📚 Dodatkowe zasoby
🚫 Ignorowanie plików z .dockerignore
Dodaj pliki i foldery do .dockerignore, które nie powinny być uwzględniane w obrazie, aby zmniejszyć jego rozmiar i przyspieszyć budowę:
node_modules/
*.log
.env
⚡ Uproszczenie poleceń za pomocą aliasów
Możesz tworzyć aliasy dla często używanych poleceń, aby uruchamiać je szybciej:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 Wskazówka: porady dotyczące używania Dockera
- Nie próbuj wszystkiego zapamiętywać — używaj
docker --helplubdocker <polecenie> --help, aby eksplorować polecenia.
- Ćwicz regularnie i eksperymentuj z prostymi projektami.
Zwracaj uwagę na rozmiary obrazów i usuwaj niepotrzebne pliki przez
.dockerignore.
🌐 Przydatne linki
📘 Oficjalna dokumentacja Dockera — obszerne przewodniki i odniesienia do wszystkich tematów Dockera:
https://docs.docker.com/
📙 Docker Cheat Sheet — pełna oficjalna ściągawka Dockera:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — obrazy i rejestry:
https://hub.docker.com/