🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Опубліковано

31 серпня 2025 р.

Docker — це платформа для запуску застосунків в ізольованих контейнерах. Ця шпаргалка містить команди для роботи з образами, контейнерами, мережами, томами, а також Docker Compose і Swarm.

📦 Базові команди

Команда

Приклад

Опис

docker Основна команда CLI Docker, що використовується для запуску підкоманд та керування контейнерами, образами, мережами і томами
docker version Показати встановлену версію Docker (клієнт і сервер). Корисно для перевірки інсталяції
docker version --format '{{.Client.APIVersion}}'

Показати лише версію API клієнта Docker

docker version --format '{{.Server.Version}}'

Показати лише версію сервера (Engine) Docker

docker version --format '{{json .}}'

Вивести повну інформацію про версію у форматі JSON

docker system info Показати загальну інформацію про систему Docker: кількість контейнерів, образів, ресурси
docker info

Показати дані Docker: версії, мережі, кількість контейнерів і образів

docker info --format '{{json .}}'

Вивести інформацію у форматі JSON — корисно для автоматизації

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

Показати кількість CPU і загальний обсяг пам’яті

docker info --format '{{.Driver}}'

Показати драйвер зберігання, що використовується Docker

docker image pull Завантажити образ із Docker Hub або іншого реєстру. Контейнери не можуть запускатися без образів
docker pull ubuntu

Завантажити останній доступний образ Ubuntu

docker pull nginx:alpine

Завантажити легковажний образ Nginx на базі Alpine Linux

docker pull redis:7

Завантажити образ Redis версії 7

docker container run Створити й запустити новий контейнер з образу
docker run -it ubuntu bash

Запустити Ubuntu з інтерактивним Bash-терміналом

docker run -d nginx

Запустити Nginx у фоновому режимі (detached)

docker run -p 8080:80 nginx

Запустити Nginx і прив’язати порт контейнера 80 до порту хоста 8080

docker container ls Список запущених контейнерів
docker ps

Показати лише запущені контейнери

docker ps -a

Показати всі контейнери, включаючи зупинені

docker ps --format '{{.Names}}'

Вивести лише імена контейнерів

docker container start Запустити один або кілька зупинених контейнерів
docker start container_name

Запустити контейнер за іменем

docker start $(docker ps -aq)

Запустити всі контейнери

docker start -ai container_name

Запустити контейнер з інтерактивним терміналом

docker container stop Зупинити запущений контейнер
docker stop container_name

Зупинити контейнер за іменем

docker stop $(docker ps -q)

Зупинити всі запущені контейнери

docker stop -t 5 container_name

Зупинити контейнер, давши йому 5 секунд для завершення процесів

docker container restart Перезапустити контейнер
docker restart container_name

Перезапустити конкретний контейнер

docker restart $(docker ps -q)

Перезапустити всі запущені контейнери

docker restart -t 10 container_name

Перезапустити контейнер із затримкою 10 секунд

docker container rm Видалити контейнер
docker rm container_name

Видалити конкретний зупинений контейнер

docker rm $(docker ps -aq)

Видалити всі зупинені контейнери

docker rm -f container_name

Примусово видалити запущений контейнер

docker image ls Список завантажених образів
docker images

Показати всі образи на хості

docker images -a

Показати всі образи, включаючи проміжні шари

docker images --format '{{.Repository}}:{{.Tag}}'

Вивести лише імена й теги образів

docker image rm Видалити один або кілька образів із локального сховища
docker rmi test1:latest

Видалити образ із тегом latest із репозиторію test1

docker rmi 1a2b3c4d5e6f

Видалити образ за його ID

docker rmi $(docker images -q)

Видалити всі образи (обережно!)

🔁 Керування контейнерами

Команда

Приклад

Опис

docker container exec Виконати команду всередині запущеного контейнера
docker exec -it container bash

Запустити інтерактивний bash у контейнері з іменем container

docker exec container ls /app

Виконати команду ls у каталозі /app всередині контейнера

docker exec -d container touch /tmp/testfile

Виконати команду у контейнері у фоновому режимі (без очікування)

docker container logs Переглянути логи контейнера
docker logs container

Показати всі логи контейнера container

docker logs -f container

Стежити за логами контейнера в реальному часі

docker logs --tail 50 container

Показати останні 50 рядків логів

docker inspect Отримати детальну інформацію у форматі JSON про контейнер або образ
docker inspect container

Показати деталі контейнера container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

Показати IP-адресу контейнера

docker container stats Показати статистику використання ресурсів контейнерами у реальному часі
docker stats

Показати CPU, пам’ять, мережу та диск для всіх контейнерів

docker stats container_name

Показати статистику лише для конкретного контейнера

docker stats --no-stream

Показати одноразовий знімок статистики і вийти

docker container rename Перейменувати контейнер
docker rename old_name new_name

Перейменувати контейнер з old_name на new_name

docker container cp Копіювати файли між контейнером і хостом
docker cp container:/src/file.txt ./file.txt

Скопіювати файл із контейнера в поточний каталог хоста

docker cp ./config.yaml container:/app/config.yaml

Скопіювати файл із хоста в контейнер

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Стрімити лог-файл із контейнера та відфільтрувати рядки з “ERROR” без збереження на диск

docker container top Показати процеси, що виконуються у контейнері
docker top container

Показати процеси контейнера з іменем container

docker container pause Призупинити всі процеси у контейнері
docker pause container

Призупинити контейнер container

docker container unpause Відновити призупинений контейнер
docker unpause container

Відновити контейнер container

docker container update Оновити налаштування контейнера без перезапуску
docker update --memory 500m container

Обмежити використання пам’яті контейнера до 500 МБ

🧱 Образи та Dockerfile

Команда

Приклад

Опис

docker buildx build Створити образ Docker з Dockerfile
docker build -t my_image .

Зібрати образ з тегом my_image з поточного каталогу

docker build -t my_image:1.0 .

Зібрати образ з тегом версії 1.0

docker build --no-cache -t my_image .

Зібрати образ без використання кешу для чистої збірки

docker container commit Створити образ зі стану поточного контейнера
docker commit container my_img:v1

Створити образ my_img з тегом v1 з контейнера container

docker commit -m "Added config" container my_img:v2

Створити образ із повідомленням коміту

docker commit -a "John Doe" container my_img:latest

Створити образ із зазначенням автора

docker image tag Додати або змінити тег образу
docker tag my_image myrepo/my_image:latest

Додати тег для пушу в реєстр myrepo

docker tag my_image:1.0 my_image:stable

Створити тег stable для образу з тегом 1.0

docker tag my_image my_image:backup

Додати тег backup до локального образу

docker image push Надіслати образ у Docker Hub або інший реєстр
docker push myrepo/my_image:latest

Надіслати образ із тегом latest у репозиторій myrepo

docker push myrepo/my_image:1.0

Надіслати образ із тегом 1.0

docker push myrepo/my_image

Надіслати образ із тегом за замовчуванням latest

docker login Автентифікація у Docker Hub або іншому реєстрі
docker login

Ввести ім’я користувача і пароль інтерактивно для Docker Hub

docker login myregistry.local:5000

Увійти у приватний реєстр

docker login -u username -p password

Увійти з іменем користувача і паролем (не рекомендується)

docker logout Вийти з Docker Hub або іншого реєстру
docker logout

Вийти з Docker Hub

docker logout myregistry.local:5000

Вийти з приватного реєстру

HEALTHCHECK Інструкція Dockerfile для автоматичної перевірки стану контейнера
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

Додати healthcheck для перевірки доступності сервісу кожні 30 секунд

docker inspect --format='{{json .State.Health}}' container_name

Перевірити статус healthcheck у запущеного контейнера

🔌 Мережі та томи

Команда

Приклад

Опис

docker network ls Список усіх мереж Docker
docker network ls

Показати всі створені мережі Docker

docker network ls --filter driver=bridge

Показати лише мережі з драйвером bridge

docker network ls --format '{{.Name}}'

Показати лише імена мереж

docker network create Створити нову мережу Docker
docker network create my_net

Створити мережу з іменем my_net із налаштуваннями за замовчуванням

docker network create --driver bridge my_bridge_net

Створити мережу з драйвером bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Створити мережу із зазначеною підмережею

docker network connect Підключити контейнер до мережі
docker network connect my_net container

Підключити контейнер з іменем container до мережі my_net

docker network connect --alias db_net my_net container

Підключити з псевдонімом db_net

docker network disconnect Відключити контейнер від мережі
docker network disconnect my_net container

Відключити контейнер container від мережі my_net

docker volume ls Список усіх томів Docker
docker volume ls

Показати всі Docker-томи

docker volume ls --filter dangling=true

Показати невикористані томи

docker volume create Створити новий том Docker
docker volume create my_vol

Створити том із назвою my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

Створити тимчасовий том з використанням tmpfs

docker volume inspect Показати детальну інформацію про том
docker volume inspect my_vol

Показати інформацію про том my_vol у форматі JSON

docker volume rm Видалити один або кілька томів
docker volume rm my_vol

Видалити том із назвою my_vol

docker volume rm $(docker volume ls -qf dangling=true)

Видалити всі невикористані томи

🧩 Плагіни Docker

Команда

Приклад

Опис

docker plugin ls Список встановлених плагінів Docker
docker plugin ls

Показати всі плагіни та їхній статус

docker plugin install Встановити плагін Docker із реєстру
docker plugin install vieux/sshfs

Встановити том-плагін SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

Встановити мережевий плагін Weave

docker plugin disable Вимкнути встановлений плагін
docker plugin disable vieux/sshfs

Вимкнути плагін SSHFS

docker plugin enable Увімкнути раніше вимкнений плагін
docker plugin enable vieux/sshfs

Увімкнути плагін SSHFS

docker plugin rm Видалити плагін Docker
docker plugin rm vieux/sshfs

Видалити плагін SSHFS

📋 Docker Compose

Команда

Приклад

Опис

docker compose up Запустити контейнери, визначені у docker-compose.yml
docker compose up

Запустити всі сервіси у поточному каталозі в інтерактивному режимі

docker compose up -d

Запустити сервіси у фоновому режимі (detached)

docker compose up --build

Зібрати образи перед запуском сервісів

docker compose down Зупинити та видалити контейнери, мережі і томи, створені командою up
docker compose down

Зупинити всі запущені сервіси та видалити пов’язані ресурси

docker compose down --volumes

Також видалити томи, створені Compose

docker compose down --rmi all

Також видалити образи, створені Compose

docker compose logs Переглянути логи всіх або окремих сервісів
docker compose logs

Показати логи всіх сервісів

docker compose logs -f

Стежити за логами в реальному часі

docker compose logs web

Показати логи лише для сервісу web

docker compose exec Виконати команду всередині контейнера запущеного сервісу
docker compose exec web bash

Увійти в інтерактивну bash-оболонку контейнера сервісу web

docker compose exec db ls /var/lib/postgresql

Запустити команду ls у контейнері бази даних

docker compose exec -d worker touch /tmp/done

Виконати команду у контейнері worker у фоновому режимі

docker compose build Створити або перебудувати образи сервісів
docker compose build

Зібрати всі образи, визначені у docker-compose.yml

docker compose build web

Зібрати лише образ сервісу web

docker compose build --no-cache

Зібрати образи без використання кешу

docker compose ps Показати статус усіх сервісів і контейнерів
docker compose ps -a

Показати всі контейнери, включаючи зупинені

docker compose ps --services

Показати лише імена сервісів

docker compose pull Завантажити/оновити образи сервісів з реєстру
docker compose pull web

Завантажити образ лише для сервісу web

docker compose pull --ignore-pull-failures

Продовжувати завантаження навіть при помилках

docker compose restart Перезапустити всі або зазначені сервіси
docker compose restart db

Перезапустити лише сервіс db

docker compose restart -t 10

Перезапустити сервіси із затримкою 10 секунд

docker compose config Показати фінальну конфігурацію Compose у форматі YAML
docker compose config --services

Вивести список усіх сервісів у конфігурації

docker compose config --volumes

Вивести список усіх томів у конфігурації

docker compose start Запустити зупинені сервіси без пересоздання контейнерів
docker compose start web

Запустити сервіс web

docker compose start db api

Запустити кілька сервісів одночасно

docker compose stop Зупинити сервіси без видалення контейнерів
docker compose stop web

Зупинити сервіс web

docker compose stop -t 5

Зупинити сервіси із таймаутом 5 секунд

📤 Експорт і Імпорт

Команда

Приклад

Опис

docker image save Зберегти один або кілька Docker-образів у tar-архів для подальшого імпорту чи передачі
docker save -o image.tar my_img:tag

Зберегти Docker-образ у файл tar-архіву

docker save my_image > my_image.tar

Альтернативний спосіб збереження образу у файл

docker save -o redis_latest.tar redis:latest

Зберегти конкретний образ Redis у файл

docker image load Завантажити Docker-образи з раніше збереженого tar-архіву
docker load < image.tar

Завантажити Docker-образ із tar-архіву

docker load --input redis_latest.tar

Завантажити образ, вказавши файл через параметр

docker load --quiet < my_image.tar

Завантажити образ без виводу прогресу

docker container export Експортувати файлову систему контейнера як tar-архів без історії образу чи метаданих
docker export container > file.tar

Експортувати файлову систему контейнера в архів

docker export my_container > my_container_fs.tar

Експортувати контейнер за іменем

docker export -o container_fs.tar container_id

Експортувати контейнер за ID за допомогою прапора -o

docker image import Створити новий образ із tar-архіву файлової системи
docker import file.tar new_img

Імпортувати архів як новий Docker-образ

docker import https://example.com/image.tar my_new_image

Імпортувати образ напряму з URL

docker import - my_image < file.tar

Імпортувати зі стандартного вводу

🧹 Очищення і Діагностика

Команда

Приклад

Опис

docker system df Показати використання диску Docker: томи, образи, контейнери та кеш збірки
docker system df -v

Детальний вивід з інформацією про кожний образ, контейнер і том

docker system df --format '{{json .}}'

Вивести інформацію у форматі JSON

docker system prune Видалити всі невикористані дані Docker: зупинені контейнери, невикористані мережі, висячі образи та кеш збірки
docker system prune -a

Видалити невикористані образи, включно з проміжними

docker system prune --volumes

Видалити невикористані томи разом з іншими ресурсами

docker image prune Видалити невикористані Docker-образи, включно з висячими шарами
docker image prune -a

Видалити всі невикористані образи, включно з висячими

docker image prune --filter "until=24h"

Видалити образи, старші за 24 години

docker container prune Видалити зупинені контейнери за фільтрами або всі, якщо фільтри не задані
docker container prune --filter "until=24h"

Видалити зупинені контейнери, старші за 24 години

docker container prune --force

Видалити без підтвердження

🐝 Docker Swarm

Команда

Приклад

Опис

docker swarm init Ініціалізувати новий кластер Docker Swarm на поточному вузлі
docker swarm init --advertise-addr 192.168.1.100

Ініціалізувати кластер із вказанням IP-адреси

docker swarm init --listen-addr 0.0.0.0:2377

Ініціалізувати із зазначеним портом для прослуховування

docker service create Створити новий сервіс у кластері Swarm
docker service create --name nginx nginx

Створити сервіс Nginx у Swarm

docker service create --replicas 3 --name web webserver

Створити сервіс із 3 репліками

docker service create --name redis --publish 6379:6379 redis

Створити сервіс із прив’язкою порту

docker stack deploy Розгорнути стек сервісів у кластері Swarm на основі Compose-файлу
docker stack deploy -c docker-compose.yml mystack

Розгорнути стек із compose-файлу

docker stack deploy --with-registry-auth -c compose.yml mystack

Розгорнути з пересиланням автентифікації до реєстру

docker stack deploy -c swarm-compose.yml mystack

Використати альтернативний compose-файл для стека

docker stack rm Видалити один або кілька стеків із кластера Swarm
docker stack rm mystack

Видалити стек mystack

docker stack rm

Видалити всі стеки (не рекомендується)

docker stack rm mystack && docker swarm leave --force

Видалити стек і залишити Swarm

💼 Розширене використання Docker

🚀 Професійні команди Docker

Команда

Приклад

Опис

docker buildx Розширений інструмент для збірки образів, що замінює docker build. Підтримує мультиплатформеність, кешування, паралельні збірки та експорт у різні формати. Корисно для CI/CD і кросплатформної розробки
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

Зібрати мультиплатформений образ (ARM і x86 одночасно)

docker buildx build --load -t localimg .

Зібрати образ і завантажити його у кеш локального Docker Engine

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

Зібрати й надіслати мультиплатформений образ у реєстр

docker context Керування контекстами Docker для роботи з віддаленими чи кількома середовищами. Дозволяє швидко перемикатися між локальними та віддаленими Docker Engine
docker context create myremote --docker "host=ssh://user@host"

Створити контекст для підключення до віддаленого Docker-хоста

docker context use myremote

Перемкнутися на віддалений контекст

docker context ls

Вивести список доступних контекстів і активний

docker system events Прослуховувати події Docker у реальному часі з фільтрацією за типом (наприклад, запуск контейнера). Корисно для моніторингу й автоматизації
docker events --filter 'event=start'

Показати лише події запуску контейнерів

docker events --since 1h --until 10m

Показати події за останню годину до 10 хвилин тому

docker events --filter 'type=network'

Показати лише події, пов’язані з мережею

docker events --filter 'image=nginx'

Показати події, що стосуються образу nginx

docker container update Змінити обмеження ресурсів і налаштування запущеного контейнера без його перезапуску
docker update --cpus 2 --memory 1g my_container

Встановити обмеження: 2 CPU і 1 ГБ RAM

docker update --restart unless-stopped my_container

Встановити політику авто-перезапуску unless-stopped

docker update --pids-limit 200 my_container

Обмежити кількість процесів до 200

docker container diff Показати зміни у файловій системі контейнера порівняно з оригінальним образом. Корисно для налагодження та аудиту
docker diff my_container

Показати всі зміни у файловій системі контейнера

docker diff my_container | grep '^A'

Показати лише додані файли (A — Added)

docker image history Показати історію шарів образу: команди збірки, розмір кожного шару й час створення. Корисно для оптимізації та аудиту
docker history my_image

Показати історію шарів образу

docker history --no-trunc my_image

Показати повні команди збірки без скорочення

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

Вивести лише команди збірки й розміри шарів

🛠 Корисні практики Docker та автоматизація

  • Мінімізація розміру образу
    Використовуйте базові образи, як alpine або scratch, для мінімального розміру.
    Для об’єднання шарів використовуйте --squash під час збірки (потрібно ввімкнути експериментальні функції).
    Також видаляйте тимчасові файли й кеш у єдиному шарі:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Мінімізуйте кількість шарів
    Об’єднуйте команди в одному RUN, щоб зменшити кількість шарів і фінальний розмір образу:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Оптимізація збірки Dockerfile
    Використовуйте багатоступеневі збірки, щоб у фінальному образі залишалися лише потрібні файли.
    Спочатку копіюйте й встановлюйте залежності, а потім код — це покращує кешування шарів і пришвидшує збірку.

  • Відокремлення секретів і конфігів
    Ніколи не зберігайте .env файли, API-ключі чи приватні сертифікати в образі.
    Для конфігурацій використовуйте:

    • docker secret (у Swarm)
    • змінні середовища (-e VAR=value або .env)
    • зовнішні томи для конфігів

  • Секрети під час збірки (BuildKit)
    Для безпечної передачі секретів під час збірки використовуйте прапор --secret:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    У Dockerfile секрет доступний за шляхом /run/secrets/mysecret:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 Це запобігає збереженню секретів у шарах образу.

  • Rootless Docker
    Запуск Docker без root-прав підвищує безпеку та знижує ризик компрометації хоста.
    Щоб увімкнути:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    Перевірка:

    docker info | grep Rootless

    ⚠ Деякі можливості (наприклад, проброс портів <1024) будуть недоступні.

  • Сканування образів на вразливості
    Використовуйте вбудовані інструменти:

    docker scan my_image

    Або новий CLI:

    docker scout cves my_image

    Це допомагає виявляти вразливості в базових образах і залежностях.

  • Моніторинг використання ресурсів
    Обмежуйте контейнери по пам’яті, CPU і кількості процесів:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    Це запобігає надмірному споживанню ресурсів.
    Можна також обмежити I/O:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    Корисно для контейнерів, які не повинні перевантажувати дискову підсистему.

  • Автоматичне очищення
    Регулярно видаляйте невикористані образи, контейнери, томи й мережі:

    docker system prune -af --volumes

    ⚠ Будьте обережні: ця команда видаляє всі невикористані ресурси.

    Для вибіркового очищення використовуйте:

    docker image prune --filter "until=24h"
  • Інтеграція з CI/CD
    Вбудовуйте збірку, тестування й деплой у GitHub Actions, GitLab CI, Jenkins pipelines.
    Приклад кроку GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Логування і моніторинг
    Підключайте драйвери логування (--log-driver) до централізованих систем: ELK, Loki, Splunk.
    Використовуйте Prometheus + cAdvisor для метрик контейнерів.

  • Продакшн-деплой
    Розділяйте конфіги для розробки й продакшну за допомогою docker-compose.override.yml.
    Для високої доступності й масштабування використовуйте:

    • Docker Swarm
    • Kubernetes

🐞 Налагодження і профілювання контейнерів Docker

Команда

Приклад

Опис

docker container exec Запускає команду всередині запущеного контейнера, надаючи інтерактивний доступ або можливість запускати процеси в ізольованому середовищі контейнера
docker exec -it my_container bash

Запустити інтерактивний термінал (bash) всередині запущеного контейнера

docker exec -it my_container sh

Запустити мінімальну оболонку всередині контейнера (якщо bash недоступний)

docker exec my_container ls /app

Виконати команду у контейнері без інтерактивного режиму

docker container logs Виводить логи зазначеного контейнера, дозволяючи переглядати події й вивід для діагностики й моніторингу
docker logs -f --tail 100 my_container

Переглянути останні 100 рядків логів із потоковим оновленням

docker logs my_container

Показати всі доступні логи контейнера

docker logs --since 1h my_container

Показати логи за останню годину

docker inspect Виводить детальну інформацію у форматі JSON про об’єкт Docker (контейнер, образ, мережу тощо), включаючи конфігурацію й стан
docker inspect my_container

Отримати повну JSON-інформацію про контейнер

docker inspect --format '{{.State.Pid}}' my_container

Отримати PID основного процесу контейнера на хості

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

Показати IP-адресу контейнера

nsenter (with strace) Утиліта Linux для входу у простори імен іншого процесу (наприклад, контейнера). Використовується зі strace для трасування системних викликів усередині контейнера
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Увійти в простори імен контейнера й трасувати системні виклики процесу 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

Відкрити bash-оболонку у просторах імен контейнера

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

Переглянути відкриті порти в контейнері

tcpdump (inside container) Консольний інструмент для захоплення й аналізу мережевого трафіку. Використовується у контейнері для діагностики мережевих проблем і моніторингу з’єднань
docker exec -it my_container tcpdump -i any

Захопити й проаналізувати мережевий трафік у контейнері

docker exec -it my_container tcpdump -nn port 80

Захопити трафік лише на порту 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

Зберегти трафік у файл для подальшого аналізу

docker container stats Показує поточні метрики використання ресурсів (CPU, пам’ять, мережа, диск) для одного чи кількох контейнерів у реальному часі
docker stats my_container

Показати використання CPU, пам’яті, мережі та диску контейнером у реальному часі

docker stats

Показати статистику для всіх контейнерів

docker stats --no-stream

Вивести статистику один раз і вийти

docker container top Показує список процесів, що працюють у контейнері, подібно до ps у Linux, для аналізу активності
docker top my_container

Показати процеси, що працюють у контейнері

docker top my_container aux

Використати альтернативний формат виводу, наприклад ps aux

docker top my_container -eo pid,cmd

Показати лише PID і команду процесів

docker diff Показує зміни у файловій системі контейнера порівняно з базовим образом: додані, змінені або видалені файли
docker diff my_container

Показати зміни у файловій системі контейнера порівняно з базовим образом

docker diff my_container | grep '^A'

Показати лише додані файли (A — Added)

docker diff my_container | grep '^C'

Показати лише змінені файли (C — Changed)

docker cp Копіює файли та каталоги між контейнером і хостом, дозволяючи обмін даними та резервне копіювання
docker cp my_container:/path/to/file ./file

Скопіювати файл із контейнера на хост

docker cp ./config.yaml my_container:/app/config.yaml

Скопіювати файл із хоста в контейнер

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

Скопіювати лог-файл і відфільтрувати рядки з помилками без збереження на диск

💡 Для розширеного налагодження можна використовувати nsenter, strace, tcpdump, gdb та інші низькорівневі інструменти.

💼 Розширене використання Docker Compose

🚀 Професійні команди Docker Compose

Команда

Приклад

Опис

docker compose up Запуск і керування життєвим циклом вказаних сервісів з файлу docker-compose.yml із можливістю роботи у фоновому режимі
docker compose up -d web db

Запустити лише сервіси web і db у фоновому режимі

docker compose up --build

Перезібрати образи перед запуском сервісів

docker compose up --remove-orphans

Видалити контейнери, не визначені в поточному compose-файлі

docker compose build Збірка образів для сервісів, як описано у compose-файлі, з керуванням кешем і паралельною збіркою
docker compose build --no-cache

Повністю зібрати образи без використання кешу

docker compose build --parallel

Зібрати всі сервіси одночасно для прискорення процесу

docker compose build web

Зібрати образ лише для сервісу web

docker compose pull Завантаження останніх версій образів з реєстру для всіх або вказаних сервісів
docker compose pull

Завантажити образи для всіх сервісів

docker compose pull db

Завантажити образ лише для сервісу db

docker compose pull --ignore-pull-failures

Продовжити виконання, ігноруючи помилки під час завантаження образів

docker compose restart Перезапуск усіх або вказаних сервісів без пересоздання контейнерів
docker compose restart

Перезапустити всі сервіси поточного проєкту

docker compose restart worker

Перезапустити лише сервіс worker

docker compose restart web db

Перезапустити кілька сервісів одночасно

docker compose exec Виконати команду всередині контейнера запущеного сервісу з можливим інтерактивним режимом
docker compose exec db psql -U user -d database

Запустити psql усередині контейнера сервісу db

docker compose exec web sh

Відкрити оболонку всередині контейнера web

docker compose exec api curl http://localhost:8080

Виконати curl-запит із контейнера сервісу api

docker compose config Вивести фінальну конфігурацію Compose з урахуванням усіх файлів і змінних середовища
docker compose config

Показати об’єднану конфігурацію у форматі YAML

docker compose config --services

Вивести список усіх сервісів

docker compose config --environment

Показати всі змінні середовища, які використовуються сервісами

docker compose watch Автоматичний перезапуск сервісів при зміні вихідних файлів, корисно для розробки
docker compose watch

Почати відстеження файлів і перезапускати сервіси при змінах

docker compose events Потоковий вивід подій Compose: запуск, зупинка, оновлення сервісів
docker compose events --json

Отримати події у форматі JSON

docker compose rm Видалити зупинені контейнери сервісів
docker compose rm web db

Видалити контейнери сервісів web і db

docker compose pause Призупинити роботу сервісу
docker compose pause api

Призупинити сервіс api

docker compose unpause Відновити призупинені сервіси
docker compose unpause api

Відновити сервіс api

docker compose create Створити контейнери без їх запуску
docker compose create web db

Створити контейнери для web і db, але не запускати їх

docker compose images Показати список образів, які використовуються сервісами
docker compose images

Вивести образи всіх сервісів

docker compose top Показати процеси, що виконуються всередині контейнерів сервісів
docker compose top web

Показати процеси всередині контейнерів сервісу web

🛠 Корисні практики й автоматизація з Docker Compose

  • Розділення середовищ
    Використовуйте окремі файли docker-compose.override.yml для різних середовищ — development, staging, production. Це допомагає ізолювати конфігурації та уникнути конфліктів.
    Можна також поєднувати кілька конфігураційних файлів із прапором -f:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    Використовуйте різні .env файли (.env.dev, .env.prod тощо) для керування змінними середовища.

  • Безпечне зберігання секретів
    Не включайте чутливі дані (паролі, токени) безпосередньо у Compose-файли. Замість цього використовуйте:

    • файли .env для змінних середовища (зауважте, що .env файли не шифруються і не повинні комітитися в публічні репозиторії)
    • docker secret і docker config для безпечного керування секретами й конфігами у Docker Swarm
    • зовнішні томи для конфігураційних файлів із секретами
    • зовнішні системи керування секретами (наприклад, HashiCorp Vault, AWS Secrets Manager)

  • Порядок запуску з depends_on і healthcheck
    Щоб сервіси чекали, доки залежності будуть готові:

    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_healthy
  • Мінімізація простою під час оновлень
    Перед оновленням сервісів виконайте:

    docker compose pull && docker compose up -d --remove-orphans

    Опція -d запускає контейнери у фоновому режимі, а --remove-orphans видаляє контейнери, не визначені у поточних конфігах.
    Щоб повністю зупинити й видалити старі контейнери за потреби:

    docker compose down --remove-orphans

    Це забезпечує завантаження свіжих образів і видалення невикористаних контейнерів без простою.

  • Гарячий перезапуск коду для розробки
    Використовуйте volumes, щоб монтувати локальні каталоги в контейнери. Це дозволяє миттєво застосовувати зміни коду без перескладання образів.
    Звертайте увагу на проблеми з правами доступу та кешуванням файлової системи, особливо у Windows та macOS, щоб уникати проблем із продуктивністю.

  • Гарячий перезапуск коду без томів (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Централізоване логування сервісів
    Перенаправляйте логи контейнерів у системи моніторингу й агрегації логів, як-от ELK Stack, Loki, Prometheus і Fluentd, для зручного аналізу й алертингу.
    Використовуйте драйвери логування Docker (--log-driver) для централізованого збору й обробки логів.
    Налаштуйте драйвери логування для контейнерів у Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • Автоматичний перезапуск сервісів
    Налаштуйте політику перезапуску в docker-compose.yml:

    restart: unless-stopped

    Інші політики перезапуску включають:

    • no — без автоматичного перезапуску (за замовчуванням)
    • always — завжди перезапускати контейнер
    • on-failure — перезапускати лише при збоях (можна задати кількість повторів)

    У продакшні оптимально використовувати unless-stopped, щоб забезпечити відмовостійкість сервісу.
    Це дає змогу автоматично відновлювати сервіси після збоїв чи перезавантаження хоста.

  • Профілі сервісів
    Дозволяють запускати лише певні групи сервісів:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    Щоб запустити лише профіль frontend:

    docker compose --profile frontend up

🐞 Налагодження і профілювання сервісів у Docker Compose

Команда

Приклад

Опис

docker compose exec Виконати команду всередині запущеного сервісу, отримавши доступ до контейнера або запустивши окремі процеси
docker compose exec web sh

Відкрити оболонку всередині контейнера сервісу web

docker compose exec db psql -U user -d database

Запустити команду psql у контейнері сервісу db

docker compose logs Перегляд логів сервісів для діагностики й моніторингу
docker compose logs -f db

Переглянути логи сервісу db у реальному часі

docker compose logs --tail=50 api

Показати останні 50 рядків логів сервісу api

docker compose logs --since=1h web

Показати логи за останню годину для сервісу web

docker inspect Переглянути детальну інформацію про контейнер, у якому запущено сервіс
docker inspect $(docker compose ps -q web)

Отримати JSON із докладною інформацією про контейнер сервісу web

docker container stats Моніторинг використання ресурсів контейнерами сервісів
docker stats $(docker compose ps -q worker)

Відстежувати використання CPU, пам’яті та інших ресурсів контейнером сервісу worker

docker compose run --rm Запустити тимчасовий контейнер із налаштуваннями сервісу, корисно для налагодження
docker compose run --rm web sh

Запустити одноразовий контейнер для сервісу web з інтерактивною оболонкою

docker container cp Копіювання файлів між хостом і контейнером
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Скопіювати файл із контейнера сервісу db на хост

💡 Для зручного налагодження складних багатосервісних оточень використовуйте docker compose run --rm, щоб запускати окремі контейнери з необхідними мережами й томами без впливу на основні сервіси.

📚 Додаткові ресурси

🚫 Ігнорування файлів із .dockerignore

Додавайте у файл .dockerignore файли й папки, які не потрібно включати до образу, щоб зменшити його розмір і пришвидшити збірку:

node_modules/
*.log
.env

⚡ Спрощення команд за допомогою псевдонімів

Можна створювати псевдоніми для часто використовуваних команд, щоб виконувати їх швидше:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 Порада: використання Docker

  • Не намагайтеся запам’ятати все — використовуйте docker --help або docker <command> --help, щоб ознайомитися з командами.
  • Регулярно практикуйтеся та експериментуйте на простих проєктах.
  • Слідкуйте за розміром образів і видаляйте непотрібні файли через .dockerignore.

🌐 Корисні посилання

📘 Офіційна документація Docker — докладні посібники й довідники з усіх тем Docker:
https://docs.docker.com/

📙 Docker Cheat Sheet — повна офіційна шпаргалка Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — образи та реєстри:
https://hub.docker.com/