← Назад к вопросам

В чем разница между docker run и docker create?

1.2 Junior🔥 71 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между docker run и docker create

docker run и docker create — это два ключевых инструмента для работы с контейнерами, но они работают немного по-разному.

docker create — создание без запуска

docker create создаёт новый контейнер из образа, но не запускает его. Контейнер находится в состоянии Created и готов к запуску.

docker create --name my-container -it ubuntu:20.04 bash

После этого контейнер существует, но не работает. Для запуска нужно выполнить:

docker start my-container

docker run — всё в одно

docker run — это комбинация двух операций:

  1. Создание контейнера (как docker create)
  2. Немедленный запуск (как docker start)
docker run --name my-container -it ubuntu:20.04 bash

Контейнер создаётся и сразу же запускается.

Ключевые отличия

Аспектdocker createdocker run
СозданиеДаДа
ЗапускНетДа (немедленно)
Операции1 шаг2 шага в одной команде
ИспользованиеКогда нужна отложенная работаДля быстрого старта
Полная командаdocker create && docker startdocker run

Когда использовать каждую

docker create применяется когда:

  • Нужно подготовить контейнер, но запустить его позже
  • Требуется модифицировать контейнер до первого запуска
  • Нужна тонкая настройка в коде перед стартом
# Создаём несколько контейнеров
docker create --name db-1 postgres:14
docker create --name db-2 postgres:14

# Запускаем их в нужный момент
docker start db-1 db-2

docker run применяется когда:

  • Нужно быстро запустить контейнер
  • Не требуется промежуточная настройка
  • Это стандартный рабочий процесс в CI/CD

Практический пример

# Создание контейнера БД для дальнейших приготовлений
docker create \
  --name postgres-db \
  -e POSTGRES_PASSWORD=secure \
  -v db-volume:/var/lib/postgresql/data \
  postgres:14

# Копируем скрипты инициализации
docker cp ./init.sql postgres-db:/docker-entrypoint-initdb.d/

# Теперь запускаем
docker start postgres-db

# Проверяем статус
docker ps

В сравнении с docker run, который сделает всё за раз:

docker run -d \
  --name postgres-db \
  -e POSTGRES_PASSWORD=secure \
  -v db-volume:/var/lib/postgresql/data \
  postgres:14

Под капотом

Оба инструмента используют один и тот же механизм создания контейнеров через Docker daemon. Разница в API уровне:

import docker

client = docker.from_env()

# Эквивалент docker create
container = client.containers.create(
    image="ubuntu:20.04",
    command="bash",
    stdin_open=True,
    tty=True
)

# Затем нужен отдельный вызов для запуска
container.start()

# В отличие от docker run
container = client.containers.run(
    image="ubuntu:20.04",
    command="bash",
    stdin_open=True,
    tty=True,
    detach=True  # Иначе будет заблокирован
)

Резюме

docker create и docker run различаются в том, что первый только создаёт контейнер, а второй создаёт и запускает. Выбор зависит от вашего workflow: используйте docker create, если нужна предварительная подготовка, и docker run для быстрого старта.