Mastering Docker: Полное руководство по работе с командами
Docker — это платформа, позволяющая запускать приложения в изолированных контейнерах, и на сегодняшний день она получила широкое распространение. Docker-контейнеры используются для быстрого и надёжного запуска, развёртывания и управления приложениями. Контейнеры позволяют запускать приложения в изолированной среде, используя общее ядро операционной системы.
Данное руководство охватывает наиболее часто используемые команды при работе с Docker — работа с образами, управление контейнерами, настройка сетей и томов, Docker Compose, работа с реестрами и очистка системы. Понимание этих команд поможет вам эффективно работать с Docker.
-
Перед прочтением данного руководства вы должны быть знакомы с Docker. Если вы ещё не знакомы, рекомендуем ознакомиться со следующим руководством — Введение в Docker (opens in a new tab).
-
Для полного освоения данного руководства у вас должен быть установлен Docker. Если он ещё не установлен, ознакомьтесь с этим руководством и установите Docker — Установка Docker на Linux-серверы (opens in a new tab)
-
Знание написания Dockerfile также пригодится вам в данном руководстве — Написание Dockerfile (opens in a new tab)
Основные команды Docker
docker version
Эта команда используется для проверки установленной версии Docker. Она отображает информацию о версиях Docker Client и Server (Docker daemon).
docker versionВ результате отображается следующая информация:
- Номера версий Client и Server
- Версия API
- Номер Git-коммита
- Версия Go
- Дата сборки и ОС (операционная система)
docker info
Эта команда предоставляет подробную информацию о Docker daemon.
docker infoВ результате отображается следующая информация:
- Версия Docker
- Количество имеющихся контейнеров и образов
- Состояние работы Docker Engine и ограничения памяти
- Информация о сетях, томах и драйверах хранения
docker --help
Эта команда используется для получения справочной информации по любым командам Docker. Если вы хотите узнать все параметры и опции определённой команды, используйте эту команду для получения дополнительной информации.
docker --help
# Справка по конкретной команде
docker run --help
docker build --helpРабота с образами
docker images
Эта команда отображает список Docker-образов, имеющихся в текущей системе.
docker imagesВ результате для каждого образа отображаются следующие столбцы:
- REPOSITORY — имя образа
- TAG — тег версии
- IMAGE ID — уникальный идентификатор образа
- CREATED — время создания
- SIZE — размер
# Показать только ID образов
docker images -q
# Все образы (включая промежуточные слои)
docker images -a
# С фильтром
docker images --filter "dangling=true"docker pull
Эта команда используется для загрузки образа из Docker Hub или другого реестра. Если тег не указан, Docker автоматически загружает образ с тегом latest.
docker pull image-nomi:tagВ результате:
- Информация о загрузке слоёв образа
- Подтверждающее сообщение в случае успешной загрузки
docker search
Используется для поиска образов в Docker Hub.
# Поиск образа
docker search nginx
# Только официальные образы
docker search --filter is-official=true nginx
# Фильтр по количеству звёзд
docker search --filter stars=100 nginxdocker build
Эта команда используется для создания образа на основе Dockerfile. Она указывает директорию, в которой расположен Dockerfile, и создаёт на его основе новый образ.
docker build -t image-nomi:tag .Если Dockerfile находится не в директории запуска команды, путь указывается с помощью флага -f:
docker build -f /path/to/Dockerfile -t image-nomi:tag .В результате:
- Чтение Dockerfile и статус выполнения каждого слоя
- Успешность создания образа и его идентификатор (sha256)
Полезные флаги:
# Создание без кэша сборки
docker build --no-cache -t image-nomi:tag .
# Передача аргумента сборки
docker build --build-arg VERSION=1.0 -t image-nomi:tag .
# Целевой этап (multi-stage build)
docker build --target builder -t image-nomi:tag .docker tag
Эта команда используется для присвоения образу нового имени и тега. Она не клонирует образ, а лишь создаёт новое имя (ссылку).
docker tag image-nomi yangi-image-nomi# Присвоение тега для реестра
docker tag myapp:latest registry.example.com/myapp:v1.0docker rmi
Эта команда используется для удаления образа из системы. Если образ используется каким-либо контейнером, удалить его нельзя.
docker rmi image-nomi:tag# Принудительное удаление (force)
docker rmi -f image-nomi:tag
# Удаление нескольких образов
docker rmi image1:tag image2:tag
# Удаление всех образов
docker rmi $(docker images -q)docker save и docker load
docker save — используется для сохранения образа в виде архивного файла .tar.
docker save -o image-file.tar image-nomi:tagЭта команда часто используется для переноса образов в виде .tar-архивов на серверы без доступа к интернету (air-gapped).
docker load — используется для загрузки ранее сохранённого .tar-файла обратно в качестве Docker-образа.
docker load -i image-file.tar# Также можно использовать через pipe
docker save myapp:latest | gzip > myapp.tar.gz
gunzip -c myapp.tar.gz | docker loaddocker history
Эта команда позволяет просмотреть историю слоёв, использованных при создании образа. Каждый слой соответствует одной инструкции Dockerfile.
docker history image-nomi:tag# Просмотр полных команд (без усечения)
docker history --no-trunc image-nomi:tagdocker inspect
Эта команда используется для получения подробной технической информации об образе или контейнере. Результат возвращается в формате JSON.
docker inspect image-nomi:tag# Получение конкретной информации (Go template)
docker inspect --format='{{.Config.ExposedPorts}}' image-nomi
# Просмотр размера образа
docker inspect --format='{{.Size}}' image-nomiРабота с контейнерами
docker ps
Эта команда отображает список активных контейнеров.
docker psВ результате для каждого контейнера вы увидите столбцы ID, IMAGE, COMMAND, CREATED, STATUS, PORTS и NAMES.
Для отображения всех контейнеров (активных и остановленных) используется флаг -a:
docker ps -aВ результате отображаются также остановленные контейнеры. В данном случае redis является остановленным контейнером.
# Показать только ID контейнеров
docker ps -q
# Последний созданный контейнер
docker ps -l
# С фильтром
docker ps --filter "status=exited"
docker ps --filter "name=redis"
# Пользовательский формат
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"docker run
Эта команда используется для создания нового контейнера из образа и его запуска. Если образ отсутствует в системе, по умолчанию он сначала загружается из Docker Hub с помощью docker pull.
docker run image-nomi:tagКонтейнер создаётся и привязывается к терминалу.
Detached mode (-d)
Для запуска контейнера в фоновом режиме (detach) используется флаг -d — контейнер работает без привязки к терминалу.
docker run -d image-nomi:tagКонтейнер запускается в фоновом режиме, и в терминале отображается ID контейнера. Его можно увидеть с помощью docker ps.
Interactive mode (-it)
Запускает контейнер в интерактивном режиме и привязывает терминал к контейнеру. Внутри контейнера открывается консоль.
docker run -it image-nomi /bin/bash
# или
docker run -it image-nomi /bin/shВнутри контейнера открывается интерактивная сессия, через которую вы можете выполнять команды в контейнере.
Port mapping (-p)
Привязка порта хоста к порту контейнера:
# host_port:container_port
docker run -d -p 8080:80 nginx
# Несколько портов
docker run -d -p 8080:80 -p 8443:443 nginx
# Открытие только на localhost
docker run -d -p 127.0.0.1:8080:80 nginx
# Случайный порт хоста
docker run -d -p 80 nginxVolume mount (-v)
Подключение тома к контейнеру:
docker run -v volume:/path image-nomiEnvironment variables (-e)
Установка переменных окружения при запуске контейнера:
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=FL20315dl2w132 -d mysql:latest-e MYSQL_ROOT_PASSWORD=FL20315dl2w132 — задаёт пароль для пользователя root MySQL.
# Несколько переменных окружения
docker run -e DB_HOST=localhost -e DB_PORT=5432 image-nomi
# Загрузка переменных окружения из файла
docker run --env-file .env image-nomiФлаг --env-file очень полезен — в production-среде загрузка паролей и секретов из файла .env вместо указания в командной строке является более безопасным подходом.
Name (--name)
Присвоение имени контейнеру:
docker run -d --name my-redis redis:latestRestart policy (--restart)
Определяет поведение при остановке контейнера:
docker run -d --restart always image-nomi| Политика | Описание |
|---|---|
no | Не перезапускать (по умолчанию) |
on-failure | Перезапускать только при остановке с ошибкой |
on-failure:5 | Максимум 5 попыток перезапуска |
always | Всегда перезапускать (даже при перезапуске Docker daemon) |
unless-stopped | Как always, но не перезапускать, если контейнер был остановлен вручную |
Auto-remove (--rm)
Контейнер автоматически удаляется при остановке — очень полезно для тестирования и временных задач:
docker run --rm -it ubuntu:24.04 /bin/bashResource limits
Ограничение CPU и памяти для контейнера:
docker run -d --cpus 2 --memory 512m --memory-swap 1g image-nomiПримеры сложных команд docker run
sudo docker run -d -p 3000:3000 --name devops-journey --restart always devopsjourneyuz/devops-journey-uz:latestЭта команда использует несколько параметров:
-d— запускает контейнер в фоновом режиме-p 3000:3000— привязывает порт 3000 локальной машины к порту 3000 контейнера--name devops-journey— присваивает контейнеру имя "devops-journey"--restart always— автоматически перезапускает контейнер при его остановкеdevopsjourneyuz/devops-journey-uz:latest— загружает и запускает образdevops-journey-uz:latestиз Docker Hub
Сложный пример с томом:
Эта команда использует несколько параметров:
-d (detach mode)— запускает контейнер в фоновом режиме-p 8081:8081— привязывает порт 8081 локального хоста к порту 8081 внутри контейнера. Через это можно получить доступ к веб-интерфейсу контейнера по адресуhttp://localhost:8081на хост-системе--name nexus— присваивает контейнеру имяnexus-v /mnt/nexus-data:/nexus-data— привязывает директорию/mnt/nexus-dataхост-системы к директории/nexus-dataвнутри контейнера. Это обеспечивает постоянное хранение — данные сохраняются даже при удалении контейнераsonatype/nexus3— образ Nexus Repository Manager версии 3
docker stop / docker start / docker restart
docker stop — используется для корректной остановки активного контейнера. Контейнеру отправляется сигнал SIGTERM, и он выполняет graceful shutdown.
docker stop container-nomi# С таймаутом (по умолчанию 10 секунд)
docker stop -t 30 container-nomi
# Остановка нескольких контейнеров
docker stop container1 container2 container3
# Остановка всех контейнеров
docker stop $(docker ps -q)docker start — используется для повторного запуска остановленного контейнера.
docker start container-nomiВ результате контейнер снова начинает работать в активном состоянии.
docker restart — используется для перезапуска контейнера (stop + start).
docker restart container-nomiВ результате контейнер останавливается и немедленно перезапускается.
docker kill
Используется для немедленной принудительной остановки контейнера. Эта команда отправляет сигнал SIGKILL — контейнер останавливается без graceful shutdown.
docker kill container-nomiРазница между docker stop и docker kill:
docker stop— отправляетSIGTERM, давая контейнеру время на graceful shutdown (по умолчанию 10 с). Если контейнер не остановится за это время, отправляетсяSIGKILLdocker kill— немедленно отправляетSIGKILL, контейнер принудительно останавливается- Обычно используется
docker stop.docker killприменяется только в случаях, когда контейнер не отвечает
docker rm
Используется для удаления остановленного контейнера из системы. Активный контейнер удалить нельзя — сначала его нужно остановить с помощью docker stop или docker kill.
docker rm container-nomi# Принудительное удаление (даже если работает)
docker rm -f container-nomi
# Удаление всех остановленных контейнеров
docker rm $(docker ps -aq --filter "status=exited")docker exec
Позволяет входить в работающий контейнер и выполнять команды. Если в контейнере нет bash, используется sh.
docker exec -it container-nomi /bin/bash
# или
docker exec -it container-nomi /bin/shВ результате внутри контейнера открывается интерактивная терминальная сессия.
# Выполнение одной команды (без интерактивного режима)
docker exec container-nomi ls -la /app
# Вход от имени root
docker exec -u root -it container-nomi /bin/bash
# С переменной окружения
docker exec -e MY_VAR=hello container-nomi env
# Указание рабочей директории
docker exec -w /app container-nomi pwddocker logs
Позволяет просматривать логи контейнера. Эта команда незаменима, когда приложение перестаёт работать или требуется отладка.
docker logs container-nomiНа рисунке показаны логи контейнера redis.
# Отслеживание логов в реальном времени (follow)
docker logs -f container-nomi
# Последние N строк
docker logs --tail 100 container-nomi
# Фильтр по времени
docker logs --since 2h container-nomi
docker logs --since "2024-01-01T00:00:00" container-nomi
# С временными метками
docker logs -t container-nomi
# Комбинация follow + tail
docker logs -f --tail 50 container-nomidocker logs -f — наиболее часто используемый вариант. Очень полезен для отслеживания логов контейнера в реальном времени. Выход осуществляется по Ctrl+C.
docker port
Просмотр привязок портов контейнера:
docker port container-nomiВ результате отображается, какие порты контейнера привязаны к каким портам хоста.
Работа с томами
Тома в Docker предоставляют контейнерам возможность постоянного хранения данных. Тома сохраняют данные даже при удалении или перезапуске контейнеров.
docker volume ls
Отображает список всех томов, созданных в системе.
docker volume lsdocker volume create
Используется для создания нового тома.
docker volume create volume-nomidocker volume rm
Используется для удаления существующего тома из системы. Если том используется каким-либо контейнером, удалить его нельзя.
docker volume rm volume-nomidocker volume prune
Удаляет неиспользуемые тома. Если том не используется ни одним контейнером, он удаляется из системы.
docker volume pruneУдаление всех томов:
docker volume rm $(docker volume ls -q)docker volume inspect
Отображает техническую информацию о томе — его расположение, точки монтирования и другие данные.
docker volume inspect volume-nomiПодключение тома к контейнеру
Named volume
Создание именованного тома и подключение его к контейнеру — наиболее рекомендуемый способ:
docker run -v volume-nomi:/data busyboxВ данном примере том mysql-volume подключается к директории /var/lib/mysql контейнера, и все данные контейнера сохраняются в томе.
Bind mount (Host Path)
Для привязки директории хоста к директории контейнера используется bind mount:
docker run -v /host/path:/container/path image-nomiВ данном случае директория /mnt/nexus-data хост-системы привязывается к директории /nexus-data контейнера. С помощью bind mount можно организовать обмен данными между контейнером и хост-системой в реальном времени.
Named volume и Bind mount:
- Named volume — управляется Docker, портативен, легко создавать резервные копии. Рекомендуется для production
- Bind mount — напрямую привязан к файловой системе хоста, удобен для монтирования исходного кода при разработке
- Монтирование только для чтения:
-v /host/path:/container/path:ro— внутри контейнера доступно только чтение
Работа с сетями Docker
Сети Docker используются для обеспечения связи между контейнерами и запуска приложений в изолированной среде.
Для лучшего понимания сетей Docker рекомендуем посмотреть следующее видеоруководство — Docker Networking Tutorial (Bridge - None - Host - IPvlan - Macvlan - Overlay) (opens in a new tab)
Сетевые драйверы Docker
| Драйвер | Описание |
|---|---|
bridge | Сеть по умолчанию. Контейнеры на одном хосте взаимодействуют друг с другом |
host | Контейнер напрямую использует сеть хоста (маппинг портов не требуется) |
none | Без сети. Контейнер не взаимодействует с внешним миром |
overlay | Многохостовая сеть (Docker Swarm). Контейнеры на разных серверах взаимодействуют между собой |
macvlan | Контейнеру назначается собственный MAC-адрес, он подключается напрямую к физической сети |
docker network ls
Отображает список всех доступных в системе сетей.
docker network lsВ результате вы увидите NETWORK ID, имя (NAME), тип (DRIVER) и область действия (scope) сетей.
docker network create
Используется для создания новой сети.
docker network create network-nomi# Создание с подсетью
docker network create --subnet=172.20.0.0/16 network-nomi
# Указание драйвера
docker network create --driver overlay network-nomidocker network inspect
Предоставляет подробную техническую информацию о сети — список подключённых контейнеров и параметры сети.
docker network inspect network-nomiВ результате вы увидите техническую информацию сети Docker в формате JSON, подключённые контейнеры и другие подробности.
docker network connect / disconnect
Подключение контейнера к существующей сети:
docker network connect network-nomi container-nomiВ результате контейнер redis подключается к сети redis-network. Проверить можно с помощью docker network inspect network-nomi.
Отключение контейнера от сети:
docker network disconnect network-nomi container-nomiВ результате контейнер redis отключается от сети redis-network.
docker network rm
Используется для удаления неиспользуемой сети из системы.
docker network rm network-nomiЗапуск контейнера с сетью
# Запуск контейнера в определённой сети
docker run -d --name redis --network my-network redis:latest
# Назначение статического IP контейнеру
docker run -d --name redis --network my-network --ip 172.20.0.10 redis:latestВажно: Контейнеры в одной сети могут находить друг друга по имени контейнера (DNS-разрешение). Например, если в сети my-network есть контейнер с именем redis, другой контейнер может подключиться к нему по адресу redis:6379.
Работа с Docker Compose
Docker Compose используется для одновременного управления несколькими сервисами. С помощью Docker Compose можно управлять всеми компонентами приложения (например, web, db, cache) в одном месте.
Для лучшего понимания Docker Compose рекомендуем посмотреть следующее видеоруководство — Docker Compose Tutorial for Beginners (Networks - Volumes - Secrets - Postgres - Letsencrypt) (opens in a new tab)
docker compose up
Запускает все сервисы на основе файла docker-compose.yml. Образы создаются, контейнеры запускаются. Эту команду необходимо выполнять в директории, где находится файл docker-compose.yml.
docker compose up
# Запуск в фоновом режиме
docker compose up -dВ результате вы увидите, что сервисы, описанные в docker-compose.yml, запущены.
# Запуск только определённого сервиса
docker compose up -d redis
# Пересборка образов и запуск
docker compose up -d --build
# Масштабирование
docker compose up -d --scale web=3docker compose down
Останавливает все сервисы и удаляет их контейнеры. Сети также удаляются, но тома сохраняются.
docker compose down# Удаление томов
docker compose down -v
# Удаление образов
docker compose down --rmi alldocker compose ps
Отображает все активные контейнеры сервисов.
docker compose psdocker compose logs
Позволяет просматривать логи всех контейнеров.
docker compose logs# Отслеживание в реальном времени
docker compose logs -f
# Логи определённого сервиса
docker compose logs -f web
# Последние N строк
docker compose logs --tail 50docker compose exec
Позволяет входить в контейнер определённого сервиса и выполнять команды.
docker compose exec web /bin/bashdocker compose stop
Используется для остановки всех сервисов. Контейнеры сохраняются, но сервисы останавливаются.
docker compose stopdocker compose build
Сборка образов для сервисов:
# Сборка всех сервисов
docker compose build
# Сборка определённого сервиса
docker compose build web
# Сборка без кэша
docker compose build --no-cachedocker compose pull
Обновление образов из реестра:
docker compose pulldocker compose config
Валидация файла docker-compose.yml и просмотр итоговой конфигурации:
docker compose configЭта команда очень полезна для обнаружения синтаксических ошибок YAML.
Работа с Docker Registry
Docker Registry — это система, предназначенная для хранения, загрузки и использования Docker-образов. Docker Hub является наиболее популярным публичным Docker-реестром, но вы также можете развернуть приватный Docker-реестр — например, Harbor, Nexus или реестры облачных провайдеров (GCR, ECR, ACR).
docker login
Используется для авторизации в Docker-реестре. Запрашиваются логин и пароль.
docker login -u user-nameДля приватного Container Registry:
docker login registry.example.com -u user-namedocker logout
Используется для выхода из Docker-реестра.
docker logoutdocker push
Используется для загрузки Docker-образа в реестр. Имя образа должно быть в формате registry/repository:tag.
docker push registry/repo-name/image-nomi:tagНа рисунке показано присвоение тега ismoilovdev/redis-test:latest образу redis:latest и его отправка в Docker Hub:
Отправка Docker-образа в Container Registry:
После отправки Docker-образа он должен появиться в Container Registry — в нашем случае в Docker Hub:
docker pull (из реестра)
Используется для загрузки образа из Docker-реестра. Если тег не указан, загружается тег latest.
docker pull repo-name/image-nomi:tagЗагрузка из Docker Hub:
Загрузка из GCR (Google Container Registry) — в формате адрес-реестра/имя-репозитория/имя-образа:тег:
Очистка Docker (Clean up)
В системе Docker существует несколько команд для очистки неиспользуемых или ненужных ресурсов. Они используются для оптимизации системы и освобождения дискового пространства.
docker system prune
Используется для очистки всех ненужных ресурсов в системе Docker — остановленных контейнеров, неиспользуемых образов и сетей.
docker system prunedocker container prune
Удаляет все остановленные контейнеры из системы.
docker container prunedocker volume prune
Используется для удаления неиспользуемых томов.
docker volume prunedocker image prune
Удаляет неиспользуемые образы из системы.
docker image prunedocker network prune
Используется для удаления неиспользуемых сетей.
docker network prunedocker system prune -af
Для полной очистки всех ненужных ресурсов — контейнеров, образов, томов и сетей:
-a (all)— удаляет также все неиспользуемые образы (не только dangling, а все)-f (force)— выполняет принудительно, без запроса подтверждения
docker system prune -afЭта команда максимально освобождает дисковое пространство, но не затрагивает работающие контейнеры и относящиеся к ним ресурсы.
Будьте осторожны! docker system prune -af удаляет все неиспользуемые образы. Если вы не хотите загружать образы заново, сначала проверьте их с помощью docker images.
Другие полезные команды
docker stats
Позволяет просматривать показатели работы контейнеров в реальном времени — CPU, память, сеть и дисковый ввод-вывод.
docker stats# Конкретный контейнер
docker stats container-nomi
# Однократный просмотр (без потоковой передачи)
docker stats --no-streamdocker top
Отображает процессы, работающие внутри контейнера.
docker top container-nomidocker cp
Используется для копирования файлов и директорий из контейнера на хост-систему или с хоста в контейнер.
# Из контейнера на хост
docker cp container-nomi:/app/data /home/user/path
# С хоста в контейнер
docker cp /home/user/file.txt container-nomi:/app/docker rename
Используется для переименования работающего контейнера.
docker rename eski-container-nomi yangi-container-nomidocker pause / docker unpause
docker pause — временно приостанавливает все процессы в контейнере. Процессам отправляется сигнал SIGSTOP — они остаются в памяти, но не используют CPU.
docker pause container-nomidocker unpause — возобновляет работу временно приостановленного контейнера. Процессам отправляется сигнал SIGCONT.
docker unpause container-nomidocker update
Используется для обновления ограничений ресурсов во время работы контейнера.
docker update --cpus 2 --memory 2g --memory-swap 3g container-nomi# Обновление политики перезапуска
docker update --restart unless-stopped container-nomidocker system df
Просмотр объёма дискового пространства, занятого ресурсами Docker (образы, контейнеры, сети, тома):
docker system df# Подробная информация
docker system df -vdocker diff
Отображает файлы, изменённые в контейнере относительно файловой системы хоста:
docker diff container-nomiВ результате:
A— добавленный (Added) файлC— изменённый (Changed) файлD— удалённый (Deleted) файл
docker events
Отслеживание событий Docker daemon в реальном времени:
# События в реальном времени
docker events
# Фильтр по времени
docker events --since 1h
# События контейнеров
docker events --filter type=containerdocker wait
Ожидает остановки контейнера и возвращает код завершения:
docker wait container-nomiЭта команда полезна для ожидания завершения работы контейнера в CI/CD-пайплайнах или скриптах.
Дополнительно
Дополнительные ресурсы
- Официальная документация Docker (opens in a new tab)
- Справочник Docker CLI (opens in a new tab)
- Справочник Docker Compose (opens in a new tab)
- Введение в Docker (opens in a new tab)
- Установка Docker на Linux-серверы (opens in a new tab)
- Написание Dockerfile (opens in a new tab)
Дата: 19.10.2024 (19 октября 2024 г.)
Последнее обновление: 12.02.2026 (12 февраля 2026 г.)
Автор: Отабек Исмоилов
| Telegram (opens in a new tab) | GitHub (opens in a new tab) | LinkedIn (opens in a new tab) |
|---|