🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Дата публикации

31 августа 2025 г.

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

📦 Базовые команды

Команда

Пример

Описание

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

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

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

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

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 MB

🧱 Образы и 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

Создать образ с комментарием (commit message)

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

Добавить проверку доступности сервиса каждые 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 Engines
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

    Это предотвращает чрезмерное потребление ресурсов.
    Можно также ограничивать ввод/вывод:

    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 Выводит подробную информацию о Docker-объекте (контейнер, образ, сеть и т.д.) в формате JSON, включая конфигурацию и состояние
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 cheat sheet:
https://dockerlabs.collabnix.com/docker/cheatsheet/

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