🐳 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 (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 |
Використати альтернативний формат виводу, наприклад |
|
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/