Шпаргалка по Docker

27

Команды Docker, которые вы реально будете использовать каждый день

Русский: 2026-03-29

Docker — один из тех инструментов, который кажется избыточным, пока вы впервые не задеплоите в production без него — и тогда обратного пути уже нет. По сути, Docker просто упаковывает ваше приложение и его окружение в портативную единицу — контейнер. Один и тот же код, те же зависимости, то же поведение — неважно, запускается он на вашем ноутбуке, в CI pipeline или на сервере во Франкфурте.

Ментальная модель проста: образы — это чертежи, контейнеры — работающие экземпляры этих чертежей. Вы собираете образ один раз, а потом поднимаете из него столько контейнеров, сколько нужно. Volumes сохраняют данные за пределами жизненного цикла контейнера, а сети позволяют контейнерам общаться друг с другом. Docker Compose связывает всё вместе, когда нужно запустить несколько сервисов в связке.

Мы организовали шпаргалку по ресурсам, с которыми вы работаете — образы, контейнеры, volumes, сети — а Docker Compose получил свой собственный раздел, потому что по факту это уже отдельный инструмент. Начните с разделов «Образы» и «Контейнеры», если вы новичок. Как только они станут привычными, volumes и сети станут понятны быстро. А если вы запускаете что-то с более чем одним сервисом, Compose — ваш основной инструмент.

Одно золотое правило: не кладите важные данные внутрь контейнера без volume. Контейнеры эфемерны по определению. Когда они исчезнут, всё внутри исчезнет тоже. Volumes — ваш спасательный круг.

Образы
docker build -t <name> .
Собрать образ из Dockerfile в текущей директории
docker build -t <name>:<tag> .
Собрать и пометить образ определённой версией
docker build --no-cache -t <name> .
Собрать с нуля, игнорируя кэшированные слои
docker pull <image>
Скачать образ из registry (Docker Hub по умолчанию)
docker push <image>
Загрузить образ в registry
docker images
Показать все локально хранящиеся образы
docker images -q
Показать только ID образов (удобно для скриптов)
docker tag <image> <new:tag>
Создать новый тег, указывающий на существующий образ
docker rmi <image>
Удалить образ
docker rmi $(docker images -q -f dangling=true)
Удалить все висячие (без тега) образы
docker image prune
Удалить неиспользуемые образы (висячие)
docker image prune -a
Удалить все образы, не используемые ни одним контейнером
docker history <image>
Показать историю слоёв образа
docker inspect <image>
Показать подробные метаданные образа в JSON
Контейнеры
docker run <image>
Создать и запустить контейнер из образа
docker run -d <image>
Запустить контейнер в фоне (detached mode)
docker run -it <image> sh
Запустить интерактивно с shell (отлично для отладки)
docker run -p 8080:80 <image>
Пробросить порт хоста 8080 на порт контейнера 80
docker run --name <name> <image>
Запустить контейнер с понятным именем
docker run --rm <image>
Автоматически удалить контейнер при завершении
docker run -e KEY=value <image>
Передать переменную окружения в контейнер
docker run --env-file .env <image>
Загрузить переменные окружения из файла
docker ps
Показать запущенные контейнеры
docker ps -a
Показать все контейнеры, включая остановленные
docker start <container>
Запустить остановленный контейнер
docker stop <container>
Плавно остановить контейнер (SIGTERM, затем SIGKILL)
docker kill <container>
Немедленно убить контейнер (SIGKILL)
docker restart <container>
Перезапустить контейнер
docker exec -it <container> sh
Открыть shell внутри работающего контейнера
docker exec <container> <cmd>
Выполнить разовую команду внутри работающего контейнера
docker logs <container>
Показать stdout/stderr контейнера
docker logs -f <container>
Следить за логами в реальном времени (как tail -f)
docker logs --tail 100 <container>
Показать последние 100 строк логов
docker rm <container>
Удалить остановленный контейнер
docker rm -f <container>
Принудительно удалить контейнер, даже работающий
docker rm $(docker ps -aq)
Удалить все остановленные контейнеры
docker cp <container>:/path /local
Скопировать файлы из контейнера на хост
docker inspect <container>
Показать подробные метаданные контейнера в JSON
docker stats
Мониторинг CPU, памяти и сети всех контейнеров в реальном времени
Volumes
docker volume create <name>
Создать именованный volume
docker run -v <vol>:/data <image>
Примонтировать именованный volume в /data внутри контейнера
docker run -v $(pwd):/app <image>
Примонтировать текущую директорию в контейнер (bind mount)
docker run -v $(pwd):/app:ro <image>
Примонтировать в режиме только для чтения (контейнер не может писать)
docker volume ls
Показать все volumes
docker volume inspect <name>
Показать детали volume (точка монтирования, драйвер и т.д.)
docker volume rm <name>
Удалить volume
docker volume prune
Удалить все volumes, не используемые ни одним контейнером
Сети
docker network create <name>
Создать пользовательскую bridge-сеть
docker network create --driver overlay <name>
Создать overlay-сеть (для Swarm / мульти-хост)
docker run --network <name> <image>
Запустить контейнер в определённой сети
docker network connect <net> <container>
Подключить работающий контейнер к сети
docker network disconnect <net> <container>
Отключить контейнер от сети
docker network ls
Показать все сети
docker network inspect <name>
Показать детали сети, включая подключённые контейнеры
docker network rm <name>
Удалить сеть
docker network prune
Удалить все неиспользуемые сети
Docker Compose
docker compose up
Создать и запустить все сервисы из compose.yaml
docker compose up -d
Запустить сервисы в фоне
docker compose up --build
Пересобрать образы перед запуском сервисов
docker compose up <service>
Запустить только определённый сервис (и его зависимости)
docker compose down
Остановить и удалить контейнеры, сети, созданные через up
docker compose down -v
То же, что down, но также удалить именованные volumes
docker compose down --rmi all
Остановить всё и удалить образы тоже
docker compose build
Собрать или пересобрать все образы сервисов
docker compose build --no-cache
Пересобрать все образы с нуля
docker compose logs
Показать логи всех сервисов
docker compose logs -f <service>
Следить за логами конкретного сервиса
docker compose ps
Показать контейнеры, управляемые Compose
docker compose exec <service> sh
Открыть shell в работающем контейнере сервиса
docker compose run <service> <cmd>
Выполнить разовую команду в новом контейнере сервиса
docker compose pull
Скачать последние образы для всех сервисов
docker compose restart <service>
Перезапустить конкретный сервис
docker compose config
Проверить и показать итоговую конфигурацию Compose
Система и очистка
docker system df
Показать использование диска образами, контейнерами и volumes
docker system prune
Удалить остановленные контейнеры, неиспользуемые сети и висячие образы
docker system prune -a --volumes
Ядерный вариант — освободить всё неиспользуемое пространство
docker info
Показать общесистемную конфигурацию и статистику Docker
docker version
Показать версии клиента и сервера Docker

Используйте docker run --rm для одноразовых контейнеров. Без этого флага остановленные контейнеры тихо копятся. Запустите docker ps -a — вы можете удивиться, сколько «зомби» там прячется.

Добавьте файл .dockerignore в ваш проект. Он работает как .gitignore, только для сборок. Исключение node_modules, .git и локальных конфигов может уменьшить контекст сборки с гигабайтов до килобайтов и радикально ускорить сборку.

Располагайте инструкции в Dockerfile от наименее до наиболее часто изменяемых. Docker кэширует слои сверху вниз, поэтому если поставить COPY package.json и RUN npm install перед COPY . ., зависимости будут переустанавливаться только при реальном изменении — а не при каждом редактировании кода.

Используйте docker compose up --build во время разработки вместо отдельных шагов build и up. Пересобирается только то, что изменилось, и вы избавитесь от классической головоломки «почему моё изменение не отображается».

Запускайте docker system prune регулярно. Docker на удивление хорошо умеет захламлять диск. Добавьте -a --volumes, если хотите выжечь всё дотла, но будьте осторожны — это удаляет всё, что не используется активно, включая именованные volumes с данными.

Предпочитайте docker compose exec вместо docker exec при работе с Compose. Вы можете обращаться к сервисам по имени вместо того, чтобы искать ID контейнеров. docker compose exec db psql -U postgres лучше, чем копировать 12-символьный хэш каждый раз.

Используйте multi-stage builds, чтобы production-образы были лёгкими. Соберите приложение в одном stage со всеми dev-зависимостями, затем скопируйте только скомпилированный результат в минимальный базовый образ. Ваш образ Node в 1.2 ГБ превращается в 150 МБ.

Related Tools