docker run — как запустить контейнер в Docker

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

Вся рубрика 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.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x