Открыть сервисСервис

Docker run: синтаксис и параметры команды

docker runкоманда интерфейса командной строки (CLI) Docker, предназначенная для создания и запуска нового контейнера на основе указанного образа. Она является одной из основных команд при работе с Docker и используется для выполнения изолированных процессов в среде контейнерной виртуализации.

Общее описание

Команда docker run выполняет две последовательные операции: создаёт контейнер из указанного образа и запускает его. Если образ отсутствует локально на хосте, Docker автоматически пытается загрузить его из настроенного реестра образов (по умолчанию — Docker Hub). После завершения работы процесса, являющегося главным в контейнере, контейнер останавливается, но по умолчанию сохраняется в системе до явного удаления.

Синтаксис команды имеет следующий общий вид:

`` docker run [ОПЦИИ] ОБРАЗ [КОМАНДА] [АРГУМЕНТЫ...] ``

Опции задают параметры запуска (ограничения ресурсов, сетевые настройки, монтирование томов и т. д.), образ определяет основу файловой системы и конфигурацию, а команда и аргументы переопределяют команду по умолчанию, указанную в конфигурации образа.

Основные параметры

Команда docker run поддерживает большое количество опций, которые можно разделить на несколько функциональных групп.

Параметры отсоединённого режима и интерактивности

  • -d, --detach — запускает контейнер в фоновом (отсоединённом) режиме. После запуска команда возвращает идентификатор контейнера, а сам контейнер продолжает работать в фоне.
  • -i, --interactive — сохраняет стандартный поток ввода (STDIN) открытым даже без подключённого терминала.
  • -t, --tty — выделяет псевдотерминал (TTY), что позволяет работать с контейнером в интерактивном режиме. Обычно используется совместно с -i (комбинация -it) для запуска оболочки внутри контейнера.

Управление именем и жизненным циклом

  • --name — присваивает контейнеру понятное имя вместо автоматически сгенерированного. Имя должно быть уникальным в пределах хоста.
  • --rm — автоматически удаляет контейнер и его файловую систему после остановки. Удобно для разовых задач и тестовых запусков.
  • --restart — задаёт политику перезапуска контейнера при его остановке или перезагрузке демона Docker (например, no, always, on-failure, unless-stopped).

Параметры сети

  • -p, --publish — публикует порт контейнера на хосте в формате [IP_хоста:]порт_хоста:порт_контейнера. Позволяет обращаться к сервисам внутри контейнера из внешней сети.
  • -P, --publish-all — публикует все порты, объявленные в образе через инструкцию EXPOSE, на случайных портах хоста.
  • --network — подключает контейнер к указанной сети Docker (например, bridge, host, none или пользовательской сети).

Работа с файловой системой

  • -v, --volume — монтирует том или каталог хоста в контейнер в формате [источник:]назначение[:опции]. Используется для сохранения данных между запусками и передачи файлов.
  • --mount — более развёрнутый синтаксис монтирования, поддерживающий именованные тома, bind-mount и tmpfs.
  • -w, --workdir — задаёт рабочую директорию внутри контейнера, в которой будет выполнена команда.

Ограничение ресурсов

  • -m, --memory — устанавливает лимит оперативной памяти для контейнера (например, 512m).
  • --cpus — ограничивает количество ядер процессора, доступных контейнеру.
  • --cpu-shares — задаёт относительный вес при распределении процессорного времени.
  • --memory-swap — устанавливает размер раздела подкачки, доступного контейнеру.

Переменные окружения

  • -e, --env — задаёт переменную окружения внутри контейнера в формате ИМЯ=значение или просто ИМЯ (тогда значение берётся из окружения хоста).
  • --env-file — считывает переменные окружения из файла, где каждая строка имеет вид ИМЯ=значение.

Прочие параметры

  • --entrypoint — переопределяет точку входа (entrypoint), заданную в образе.
  • --user — запускает процесс в контейнере от указанного пользователя (имя или UID).
  • --privileged — предоставляет контейнеру расширенные привилегии, фактически приравнивая его к процессу с правами root на хосте (использование требует осторожности).
  • --read-only — монтирует корневую файловую систему контейнера в режиме только для чтения.
  • --label — добавляет метаданные (метки) к контейнеру для последующей фильтрации при просмотре списка.

Примеры использования

Запуск контейнера с веб-сервером Nginx в фоновом режиме с пробросом порта:

`` docker run -d -p 8080:80 --name web nginx ``

Запуск интерактивной оболочки внутри контейнера на базе образа Ubuntu:

`` docker run -it --rm ubuntu /bin/bash ``

Запуск контейнера с передачей переменной окружения и монтированием локального каталога:

`` docker run -e MYSQL_ROOT_PASSWORD=secret -v /host/data:/var/lib/mysql mysql:8.0 ``

Поведение и особенности

При выполнении docker run Docker создаёт новый контейнер на основе образа, добавляет к нему записываемый слой и запускает указанный процесс. Все изменения, внесённые в файловую систему контейнера во время работы, сохраняются в этом слое и теряются при удалении контейнера (если не использовались тома). Для сохранения состояния между запусками необходимо использовать именованные тома или bind-mount.

Если контейнер запускается без команды, выполняется команда по умолчанию, указанная в образе через инструкции CMD или ENTRYPOINT. При этом если в образе задан ENTRYPOINT, то аргументы, переданные после имени образа, будут переданы ему как параметры, а не переопределят команду.

Команда docker run создаёт новый контейнер при каждом вызове. Для запуска уже существующего контейнера используются команды docker start (для остановленного) и docker restart (для перезапуска). Для управления запущенными контейнерами применяются команды docker ps, docker stop, docker logs, docker exec и другие.

Отличия от смежных команд

  • docker start — запускает ранее созданный и остановленный контейнер, не создавая новый.
  • docker exec — выполняет команду внутри уже запущенного контейнера.
  • docker create — создаёт контейнер из образа, но не запускает его; впоследствии его можно запустить командой docker start.

См. также