🐳 Docker
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 | Удалить образ с тегом  | |
| 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 MB | 
🧱 Образы и 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 | Создать образ с комментарием (commit message) | |
| 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 | Добавить проверку доступности сервиса каждые 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 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' | Показать события, связанные с образом  | |
| 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- Это предотвращает чрезмерное потребление ресурсов. 
 Можно также ограничивать ввод/вывод:- 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 | Выводит подробную информацию о Docker-объекте (контейнер, образ, сеть и т.д.) в формате JSON, включая конфигурацию и состояние | |
| 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 cheat sheet:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — образы и реестры:
https://hub.docker.com/