🐳 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 (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 cheat sheet:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — образы и реестры:
https://hub.docker.com/