yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

Как запустить контейнер Docker: запуск образа с docker run

Docker и контейнеры полезны в разработке и развертывании приложений. Они позволяют создавать отдельные среды для запуска ПО и всех его зависимостей. Навыки работы с ними сейчас востребованы, поэтому стоит освоить хотя бы базу, даже если вы не занимаетесь разработкой. Читайте статью и узнаете, как запускать контейнеры с помощью docker run. 

Инструкции
Иллюстрация для статьи на тему «Как запустить контейнер Docker: запуск образа с docker run»
Продукты из этой статьи:
Иконка-Evolution Artifact Registry
Evolution Artifact Registry

Основные понятия Docker

Представьте ситуацию. Каждый разработчик работает над кодом в своем окружении. Логично, что все используют разные инструменты, библиотеки, системные зависимости. Затем один разработчик хочет продемонстрировать проект и запустить код на другом компьютере. Но ничего не выходит, поскольку он создавался и тестировался в другом окружении. 

Такие ситуации — не редкость. Чтобы их избежать, разработчики зовут на помощь платформу Docker. Это верный способ запускать ПО на разных устройствах благодаря упаковке приложений со всеми зависимостями в контейнеры. 

Что такое контейнеры и образы

Образы (Images) — шаблоны для будущих контейнеров. В них есть все, что нужно для работы с ПО: код, параметры, системные библиотеки, зависимости. Особенности:

  • Образ состоит из слоев, которые представляют собой отдельные этапы сборки ПО.

  • Образ остается неизменяемым (immutable). Когда Docker запускает контейнер из образа, он добавляет read-write слой сверху (используя UnionFS), в котором ваше приложение работает и может делать изменения. Эти изменения существуют только в слое контейнера и не влияют на исходный образ. Если вы хотите сохранить изменения, нужно создать новый образ с помощью docker commit или переписать Dockerfile. 

  • Один и тот же образ можно использовать неоднократно, не затрагивая содержимое.

Образы находятся в реестрах — серверах, которые принимают, хранят и отдают их по запросу. Самый известный реестр — Docker Hub. 

Из образов создаются контейнеры (Container) — специальные среды, в которых работают приложения. Их можно запускать, останавливать и удалять, не меняя исходный образ. Они не мешают друг другу и не затрагивают основную систему. 

Образы и контейнерыОбразы и контейнеры
Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Как работает Docker

В основе работы Docker — подход OS-level virtualization. Это значит, что решение выполняет контейнеризацию на уровне операционной системы. Оно не поднимает отдельные ОС под каждое приложение, а организует изолированные контейнеры, которые используют общее ядро хостовой системы. При этом везде собственные процессы, сети и файлы. 

Контейнерами управляет Docker Engine. Он состоит из Docker Daemon, который выполняет все активные действия, CLI (Command Line Interface) — командной строки для взаимодействия с Docker, а также REST API. 

Принцип работы Docker Принцип работы Docker

Утилита Docker run

Docker run — это ключевой инструмент для запуска контейнеров Docker. Команда создает из образа контейнер и сразу его запускает. При этом она применяет заданные параметры, переменные окружения, сетевые настройки и ограничения ресурсов.

Общий синтаксис команды Docker run

Базовый синтаксис выглядит так:

Основные элементы:

Элемент
Название
Описание
Пример
docker run
Базовая команда
Создает и запускает новый контейнер на основе конкретного образа
docker run ...
[OPTIONS]
Опции и флаги
Управляют поведением контейнера: сетью, томами, окружением, режимом запуска и ресурсами
-d, -p 80:80, -e VAR=1, -v /data:/app/data
IMAGE
Образ
Исходный шаблон, на основе которого запускается контейнер. Если образа еще нет, Docker автоматически его скачает
nginx, redis:alpine, ubuntu:22.04
[COMMAND]
Команда внутри контейнера
Команда, которая заменяет CMD из Dockerfile. Применяется опционально
bash, python app.py
[ARG...]
Аргументы для команды
Параметры, которые передаются в команду
--debug, -l, --port 3000

Часто используемые флаги и опции

Флаги позволяют управлять работой приложения: режимом, пробросом портов, монтированием данных, переменными окружения и т.д. Вот распространенные опции:

Опция
Назначение
Что делает
Пример
-d
Фоновый режим
Запускает контейнер в режиме daemon без вывода логов в терминал
docker run -d nginx
-p HOST:CONT
Проброс портов
Открывает порт контейнера и связывает его с портом хоста
docker run -p 8080:80 nginx
-v HOST:CONT
Монтирование томов
Привязывает директорию или файл с хоста к контейнеру для хранения данных
docker run -v /data:/var/lib/mysql mysql
-e KEY=VAL
Переменные окружения
Передает контейнеру значения ENV-переменных
docker run -e MODE=prod app
--name
Имя контейнера
Устанавливает новое имя вместо сгенерированного автоматически
docker run --name myapp nginx
-it
Интерактивный режим
Позволяет работать в терминале контейнера
docker run -it ubuntu bash
--rm
Автоудаление
Удаляет контейнер сразу после остановки
docker run --rm alpine echo "Hi"
--network
Сетевой режим
Позволяет выбрать виртуальную сеть Docker
docker run --network host
--restart
Политика перезапуска
Автоматически перезапускает контейнер при сбоях или перезагрузке хоста
docker run --restart=always nginx
--env-file
Файл-окружение
Загружает из файла переменные среды
docker run --env-file .env app
--cpus
Лимит CPU
Ограничивает использование процессорного времени
docker run --cpus=1.5 app
--memory
Лимит RAM
Устанавливает предельный объем памяти
docker run --memory=512m app

Запуск контейнера из образа

Рассказываем, как запустить контейнер буквально за две команды. 

Запуск существующего образа

Чтобы запустить контейнер, следует найти образ. Например, на Docker Hub. Как действовать:

  • Перейдите на Docker Hub и по названию найдите образ в поиске.

  • Выберите официальный образ или другой подходящий вариант.

  • Скопируйте имя образа, например, nginx:latest или ubuntu:22.04.

Примеры запуска с помощью Docker run

Разберем, как запускать Nginx и Ubuntu. 

Пример 1

Давайте попробуем активировать Nginx:

  • -d — запуск в фоне;

  • -p 8080:80 — проброс порта 80 внутри контейнера на 8080 на хосте;

  • --name my-nginx — имя контейнера;

  • nginx:latest — имя и тег образа.

После активации Nginx будет доступен на http://localhost:8080.

Пример 2

Теперь запустим Ubuntu и попробуем войти в контейнер:

  • -it — интерактивный режим с терминалом;

  • --name my-ubuntu — имя контейнера;

  • /bin/bash — команда, которая будет работать при запуске контейнера.

Вы попадете в терминал контейнера Ubuntu и сможете там выполнять команды.

Работа с параметрами контейнера

При запуске контейнеров Docker нужно уметь настраивать параметры. Рассмотрим два аспекта — работу с томами и передачу переменных окружения.

Работа с томами

Тома (volumes) в Docker используются для хранения конфигурационных файлов, логов и других данные контейнера вне файловой системы. Благодаря им информация не пропадет при удалении контейнера. Без томов все изменения в контейнере теряются после его остановки или удаления.

Разберем примеры команд. Сначала давайте создадим и подключим том:

-v my_volume:/app/data — создает том my_volume в директории контейнера /app/data.

Выполните монтирование локальной директории:

Локальная директория /path/on/host будет синхронизирована с /app/data внутри контейнера. Это удобно, когда нужно быстро менять файлы на хосте.

Передача переменных окружения

Переменные окружения в контейнерах Docker помогают настраивать поведение приложения во время выполнения. Например, можно задать параметры базы данных, ключи API, порты и др.

Если хотите задать переменную при запуске контейнера, примените флаг -e:

  • -d — фоновый запуск контейнера;

  • --name my_container — имя контейнера, который запускаете;

  • -e ENV_VAR_NAME=value — переменная с именем ENV_VAR_NAME и значением value.

  • my_image — имя образа, из которого вы создали контейнер.

Рассмотрим пример с двумя переменными — DB_HOST и DB_PORT:

Если переменных много, храните их в файле .env. Он может выглядеть так:

Запускайте контейнер с использованием этого файла так:

Docker считает из файла переменные и сделает их доступными внутри контейнера.

Подключение и взаимодействие с контейнером

Недостаточно просто запустить контейнер — нужно уметь с ним взаимодействовать — заходить внутрь и проверять, что и как работает. Также полезно научиться связывать контейнеры между собой. Объясняем на примерах. 

Подключение к контейнеру через терминал

Попасть внутрь контейнера поможет команда docker exec:

  • -i — дает возможность выполнять команды;

  • -t — создает терминал для отображения команд;

  • my_container — название контейнера, к которому вы подключаетесь;

  • /bin/bash — запускает оболочку Bash внутри контейнера.

После выполнения команды вы окажетесь внутри контейнера и сможете выполнять команды Linux, проверять файлы, запускать скрипты и т.д.

Связывание контейнеров и сетевое взаимодействие

Контейнеры Docker изолированы, но можно сделать так, чтобы они сообщались друг с другом, с браузером или другими сервисами. Например, дайте доступ к контейнеру через порты:

После команды порт 80 внутри контейнера будет доступен на порту 8080 компьютера. Если вы откроете браузер на http://localhost:8080, то увидите сервис внутри контейнера.

Можно объединить контейнеры в одну сеть, чтобы они могли видеть друг друга по именам:

Теперь app_container сможет подключаться к db_container по его имени  Это удобно для приложений с базой данных. Фронтенд будет видеть бэкенд, а бэкенд — базу. 

Работа с контейнерамиРабота с контейнерами
Evolution Artifact Registry
Evolution Artifact Registry
Храните и распространяйте артефакты безопасно
Узнать больше

Создание и запуск собственного образа

Можно автоматизировать создание образов с помощью Dockerfile. Рассказываем, что это такое и как с ним работать. 

Основы Dockerfile

Dockerfile — текстовый файл с инструкциями, которые Docker применяет для сборки образа. С его помощью можно настроить операционную систему, установить зависимости и подготовить ПО к запуску.

Пример Dockerfile для Python-приложения:

Какие инструкции есть в файле:

  • FROM — базовый образ для контейнера;

  • WORKDIR — рабочая директория внутри контейнера;

  • COPY — копирование файлов из локальной системы;

  • RUN — выполнение команд в процессе сборки;

  • CMD — команда, которая работает при запуске контейнера.

Сборка и запуск собственного образа

С помощью Dockerfile можно собирать образ и запускать контейнер. Примените команду:

  • -t myapp:latest — задает имя и тег образа;

  • . — указывает на директорию с Dockerfile.

Запустите контейнер с помощью команды:

  • -d — запускает контейнер в фоне;

  • -p 5000:5000 — проброс порта с контейнера на устройство;

  • myapp:latest — название образа.

После команды приложение будет доступно на localhost:5000.

Заключение

Теперь вы знаете, как собрать образ и запустить контейнер с помощью Docker run. Этот навык пригодится для работы с современными контейнерными приложениями. Чтобы лучше освоить утилиту, практикуйтесь, изучайте документацию и открывайте для себя новые возможности Docker.

Безопасно хранить и использовать Docker-образы поможет сервис Evolution Artifact Registry от Cloud.ru. Он позволит быстрее разворачивать ПО без настроек собственной инфраструктуры.

Продукты из этой статьи:
Иконка-Evolution Artifact Registry
Evolution Artifact Registry
29 декабря 2025

Вам может понравиться