docker run — основная команда Docker. Скачивает образ если его нет локально, создаёт контейнер и запускает его. Разбираем все флаги с практическими примерами.

- Базовый синтаксис
- Основные флаги с примерами
- Интерактивный режим (-it)
- Ограничение ресурсов
- Таблица флагов docker run
- Полный пример — PostgreSQL для разработки
- Часто задаваемые вопросы
- Чем docker run отличается от docker start?
- Как передать переменные окружения из .env файла?
- Что означает флаг -it в docker run?
- Что читать дальше по Docker
Базовый синтаксис
docker run [ФЛАГИ] ОБРАЗ [КОМАНДА] [АРГУМЕНТЫ]
# Простейший запуск — выполнить команду и завершить
docker run ubuntu echo "Привет из контейнера!"
# Привет из контейнера!
# Интерактивный режим (-it) — войти в оболочку
docker run -it ubuntu bash
# root@abc123:/# ← ты внутри контейнера Ubuntu
# Фоновый режим (-d, detached) — не блокирует терминал
docker run -d nginx
# abc123def456 ← вернул ID контейнера
Основные флаги с примерами
-d — фоновый режим (detach):
docker run -d nginx
# Возвращает ID контейнера, не блокирует терминал
# Контейнер работает в фоне
-p — проброс портов (HOST_PORT:CONTAINER_PORT):
docker run -d -p 8080:80 nginx
# Открыть в браузере: http://localhost:8080 → nginx
docker run -d -p 5432:5432 postgres
# Подключаться к PostgreSQL: localhost:5432
docker run -d -p 127.0.0.1:6379:6379 redis
# Только с localhost, не снаружи
—name — имя контейнера:
docker run -d --name my-web -p 8080:80 nginx
# Теперь обращаться по имени:
docker stop my-web
docker logs my-web
docker exec -it my-web bash
-e — переменные окружения:
docker run -d \
--name my-postgres \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_USER=admin \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
postgres:16
# Переменные из файла (--env-file)
docker run -d --env-file .env myapp
-v — монтирование volumes и папок:
# Named volume — Docker управляет хранилищем
docker run -d -v mydata:/var/lib/postgresql/data postgres
# Bind mount — конкретная папка с хоста
docker run -d -v $(pwd):/app node:20 node app.js
# Только для чтения (:ro)
docker run -d -v $(pwd)/config:/app/config:ro myapp
—rm — удалить контейнер после остановки:
docker run --rm ubuntu apt list --installed
# Контейнер удалится сам после выполнения команды
# Удобно для одноразовых задач
—restart — политика перезапуска:
docker run -d --restart unless-stopped nginx
# unless-stopped — перезапускать всегда кроме ручной остановки
docker run -d --restart always nginx
# always — перезапускать всегда (даже после docker stop → docker start daemon)
docker run -d --restart on-failure nginx
# on-failure — только при ненулевом exit code
docker run -d --restart no nginx
# no — не перезапускать (по умолчанию)
Интерактивный режим (-it)
# -i (interactive) — сохранить STDIN открытым
# -t (tty) — выделить псевдотерминал
# Вместе: -it — войти в контейнер как в обычный терминал
docker run -it ubuntu bash
# root@abc123:/#
# Внутри контейнера
apt update && apt install -y python3
python3 --version
# Python 3.10.12
exit # выйти и завершить контейнер
# Запустить Alpine Linux
docker run -it alpine sh
# / # ← Alpine использует sh, не bash
Ограничение ресурсов
# Ограничить память (512 МБ)
docker run -d --memory 512m nginx
# Ограничить CPU (1.5 ядра)
docker run -d --cpus 1.5 nginx
# Оба ограничения
docker run -d \
--memory 1g \
--cpus 2 \
--name my-app \
myapp:latest
# Без ограничений — контейнер может занять всю RAM и CPU сервера!
Таблица флагов docker run
| Флаг | Описание | Пример |
|---|---|---|
-d | Фоновый режим | docker run -d nginx |
-it | Интерактивный терминал | docker run -it ubuntu bash |
-p | Проброс портов | -p 8080:80 |
--name | Имя контейнера | --name my-app |
-e | Переменная окружения | -e KEY=value |
--env-file | Переменные из файла | --env-file .env |
-v | Монтирование volume | -v data:/app/data |
--rm | Удалить после выхода | docker run --rm ubuntu |
--restart | Политика перезапуска | --restart unless-stopped |
--memory | Лимит RAM | --memory 512m |
--cpus | Лимит CPU | --cpus 1.5 |
--network | Сеть | --network mynet |
--user | Пользователь | --user 1000:1000 |
Полный пример — PostgreSQL для разработки
docker run -d \
--name dev-postgres \
-e POSTGRES_PASSWORD=devpassword \
-e POSTGRES_USER=dev \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql/data \
--restart unless-stopped \
postgres:16
# Проверить
docker ps
# Подключиться через psql
docker exec -it dev-postgres psql -U dev -d myapp
Часто задаваемые вопросы
Чем docker run отличается от docker start?
docker run — создаёт новый контейнер из образа и сразу запускает. docker start — запускает уже существующий (ранее остановленный) контейнер. Аналогия: run = купить новую машину и поехать, start = завести ту что уже есть. Обычная ошибка новичков — дублировать контейнеры: запускать docker run повторно вместо docker start имя.
Как передать переменные окружения из .env файла?
Используй флаг --env-file: docker run --env-file .env myapp. Файл .env — одна переменная на строку: KEY=value. Строки с # — комментарии. Не передавай .env с паролями в Docker Hub или git. В docker compose — env_file: .env работает аналогично.
Что означает флаг -it в docker run?
-i (interactive) — оставляет STDIN открытым, позволяет вводить команды. -t (tty) — выделяет псевдотерминал, делает вывод читаемым с цветами и форматированием. Вместе -it даёт полноценный интерактивный терминал внутри контейнера. Без -t — нет цветов и промпта. Без -i — нельзя ввести команды. Для скриптов где ввод не нужен — достаточно -i.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- docker logs — проверить вывод и ошибки контейнера.
- docker exec — подключиться к запущенному контейнеру.
- docker rm — корректно удалить контейнер или образ.
- Docker Compose — перейти к запуску нескольких сервисов.



