🐳 Docker
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 | Видалити образ із тегом  | |
| docker rmi 1a2b3c4d5e6f | Видалити образ за його ID | |
| docker rmi $(docker images -q) | Видалити всі образи (обережно!) | 
🔁 Керування контейнерами
| Команда | Приклад | Опис | 
|---|---|---|
| docker container exec | Виконати команду всередині запущеного контейнера | |
| docker exec -it container bash | Запустити інтерактивний bash у контейнері з іменем  | |
| docker exec container ls /app | Виконати команду  | |
| docker exec -d container touch /tmp/testfile | Виконати команду у контейнері у фоновому режимі (без очікування) | |
| docker container logs | Переглянути логи контейнера | |
| docker logs container | Показати всі логи контейнера  | |
| docker logs -f container | Стежити за логами контейнера в реальному часі | |
| docker logs --tail 50 container | Показати останні 50 рядків логів | |
| docker inspect | Отримати детальну інформацію у форматі JSON про контейнер або образ | |
| docker inspect 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 | Перейменувати контейнер з  | |
| 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 | Показати процеси контейнера з іменем  | |
| docker container pause | Призупинити всі процеси у контейнері | |
| docker pause container | Призупинити контейнер  | |
| docker container unpause | Відновити призупинений контейнер | |
| docker unpause container | Відновити контейнер  | |
| docker container update | Оновити налаштування контейнера без перезапуску | |
| docker update --memory 500m container | Обмежити використання пам’яті контейнера до 500 МБ | 
🧱 Образи та Dockerfile
| Команда | Приклад | Опис | 
|---|---|---|
| docker buildx build | Створити образ Docker з Dockerfile | |
| docker build -t my_image . | Зібрати образ з тегом  | |
| docker build -t my_image:1.0 . | Зібрати образ з тегом версії  | |
| docker build --no-cache -t my_image . | Зібрати образ без використання кешу для чистої збірки | |
| docker container commit | Створити образ зі стану поточного контейнера | |
| docker commit container my_img:v1 | Створити образ  | |
| 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 | Додати тег для пушу в реєстр  | |
| docker tag my_image:1.0 my_image:stable | Створити тег  | |
| docker tag my_image my_image:backup | Додати тег  | |
| docker image push | Надіслати образ у Docker Hub або інший реєстр | |
| docker push myrepo/my_image:latest | Надіслати образ із тегом  | |
| docker push myrepo/my_image:1.0 | Надіслати образ із тегом  | |
| docker push myrepo/my_image | Надіслати образ із тегом за замовчуванням  | |
| 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 | Показати лише мережі з драйвером  | |
| docker network ls --format '{{.Name}}' | Показати лише імена мереж | |
| docker network create | Створити нову мережу Docker | |
| docker network create my_net | Створити мережу з іменем  | |
| docker network create --driver bridge my_bridge_net | Створити мережу з драйвером  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Створити мережу із зазначеною підмережею | |
| docker network connect | Підключити контейнер до мережі | |
| docker network connect my_net container | Підключити контейнер з іменем  | |
| docker network connect --alias db_net my_net container | Підключити з псевдонімом  | |
| docker network disconnect | Відключити контейнер від мережі | |
| docker network disconnect my_net container | Відключити контейнер  | |
| docker volume ls | Список усіх томів Docker | |
| docker volume ls | Показати всі Docker-томи | |
| docker volume ls --filter dangling=true | Показати невикористані томи | |
| docker volume create | Створити новий том Docker | |
| docker volume create my_vol | Створити том із назвою  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | Створити тимчасовий том з використанням tmpfs | |
| docker volume inspect | Показати детальну інформацію про том | |
| docker volume inspect my_vol | Показати інформацію про том  | |
| docker volume rm | Видалити один або кілька томів | |
| docker volume rm 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 | Показати логи лише для сервісу  | |
| docker compose exec | Виконати команду всередині контейнера запущеного сервісу | |
| docker compose exec web bash | Увійти в інтерактивну bash-оболонку контейнера сервісу  | |
| docker compose exec db ls /var/lib/postgresql | Запустити команду  | |
| docker compose exec -d worker touch /tmp/done | Виконати команду у контейнері  | |
| docker compose build | Створити або перебудувати образи сервісів | |
| docker compose build | Зібрати всі образи, визначені у  | |
| docker compose build web | Зібрати лише образ сервісу  | |
| docker compose build --no-cache | Зібрати образи без використання кешу | |
| docker compose ps | Показати статус усіх сервісів і контейнерів | |
| docker compose ps -a | Показати всі контейнери, включаючи зупинені | |
| docker compose ps --services | Показати лише імена сервісів | |
| docker compose pull | Завантажити/оновити образи сервісів з реєстру | |
| docker compose pull web | Завантажити образ лише для сервісу  | |
| docker compose pull --ignore-pull-failures | Продовжувати завантаження навіть при помилках | |
| docker compose restart | Перезапустити всі або зазначені сервіси | |
| docker compose restart 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 | Запустити сервіс  | |
| docker compose start db api | Запустити кілька сервісів одночасно | |
| docker compose stop | Зупинити сервіси без видалення контейнерів | |
| docker compose stop 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 за допомогою прапора  | |
| 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 | Видалити стек  | |
| 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' | Показати події, що стосуються образу  | |
| docker container update | Змінити обмеження ресурсів і налаштування запущеного контейнера без його перезапуску | |
| docker update --cpus 2 --memory 1g my_container | Встановити обмеження: 2 CPU і 1 ГБ RAM | |
| docker update --restart unless-stopped my_container | Встановити політику авто-перезапуску  | |
| docker update --pids-limit 200 my_container | Обмежити кількість процесів до 200 | |
| docker container diff | Показати зміни у файловій системі контейнера порівняно з оригінальним образом. Корисно для налагодження та аудиту | |
| docker diff my_container | Показати всі зміни у файловій системі контейнера | |
| docker diff my_container | grep '^A' | Показати лише додані файли ( | |
| 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 Swarm
🐞 Налагодження і профілювання контейнерів 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(withstrace) | Утиліта 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 | Використати альтернативний формат виводу, наприклад  | |
| docker top my_container -eo pid,cmd | Показати лише PID і команду процесів | |
| docker diff | Показує зміни у файловій системі контейнера порівняно з базовим образом: додані, змінені або видалені файли | |
| docker diff my_container | Показати зміни у файловій системі контейнера порівняно з базовим образом | |
| docker diff my_container | grep '^A' | Показати лише додані файли ( | |
| docker diff my_container | grep '^C' | Показати лише змінені файли ( | |
| 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 | Запустити лише сервіси  | |
| 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 | Зібрати образ лише для сервісу  | |
| docker compose pull | Завантаження останніх версій образів з реєстру для всіх або вказаних сервісів | |
| docker compose pull | Завантажити образи для всіх сервісів | |
| docker compose pull db | Завантажити образ лише для сервісу  | |
| docker compose pull --ignore-pull-failures | Продовжити виконання, ігноруючи помилки під час завантаження образів | |
| docker compose restart | Перезапуск усіх або вказаних сервісів без пересоздання контейнерів | |
| docker compose restart | Перезапустити всі сервіси поточного проєкту | |
| docker compose restart worker | Перезапустити лише сервіс  | |
| docker compose restart web db | Перезапустити кілька сервісів одночасно | |
| docker compose exec | Виконати команду всередині контейнера запущеного сервісу з можливим інтерактивним режимом | |
| docker compose exec db psql -U user -d database | Запустити psql усередині контейнера сервісу  | |
| docker compose exec web sh | Відкрити оболонку всередині контейнера  | |
| docker compose exec api curl http://localhost:8080 | Виконати curl-запит із контейнера сервісу  | |
| 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 | Видалити контейнери сервісів  | |
| docker compose pause | Призупинити роботу сервісу | |
| docker compose pause api | Призупинити сервіс  | |
| docker compose unpause | Відновити призупинені сервіси | |
| docker compose unpause api | Відновити сервіс  | |
| docker compose create | Створити контейнери без їх запуску | |
| docker compose create web db | Створити контейнери для  | |
| docker compose images | Показати список образів, які використовуються сервісами | |
| docker compose images | Вивести образи всіх сервісів | |
| docker compose top | Показати процеси, що виконуються всередині контейнерів сервісів | |
| docker compose top 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 | Відкрити оболонку всередині контейнера сервісу  | |
| docker compose exec db psql -U user -d database | Запустити команду psql у контейнері сервісу  | |
| docker compose logs | Перегляд логів сервісів для діагностики й моніторингу | |
| docker compose logs -f db | Переглянути логи сервісу  | |
| docker compose logs --tail=50 api | Показати останні 50 рядків логів сервісу  | |
| docker compose logs --since=1h web | Показати логи за останню годину для сервісу  | |
| docker inspect | Переглянути детальну інформацію про контейнер, у якому запущено сервіс | |
| docker inspect $(docker compose ps -q web) | Отримати JSON із докладною інформацією про контейнер сервісу  | |
| docker container stats | Моніторинг використання ресурсів контейнерами сервісів | |
| docker stats $(docker compose ps -q worker) | Відстежувати використання CPU, пам’яті та інших ресурсів контейнером сервісу  | |
| docker compose run --rm | Запустити тимчасовий контейнер із налаштуваннями сервісу, корисно для налагодження | |
| docker compose run --rm web sh | Запустити одноразовий контейнер для сервісу  | |
| docker container cp | Копіювання файлів між хостом і контейнером | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | Скопіювати файл із контейнера сервісу  | 
💡 Для зручного налагодження складних багатосервісних оточень використовуйте
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/