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.
¶См. также
- Dockerfile
- Docker Compose
- Контейнерная виртуализация