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

Основные понятия Docker
Представьте ситуацию. Каждый разработчик работает над кодом в своем окружении. Логично, что все используют разные инструменты, библиотеки, системные зависимости. Затем один разработчик хочет продемонстрировать проект и запустить код на другом компьютере. Но ничего не выходит, поскольку он создавался и тестировался в другом окружении.
Такие ситуации — не редкость. Чтобы их избежать, разработчики зовут на помощь платформу Docker. Это верный способ запускать ПО на разных устройствах благодаря упаковке приложений со всеми зависимостями в контейнеры.
Что такое контейнеры и образы
Образы (Images) — шаблоны для будущих контейнеров. В них есть все, что нужно для работы с ПО: код, параметры, системные библиотеки, зависимости. Особенности:
Образ состоит из слоев, которые представляют собой отдельные этапы сборки ПО.
Образ остается неизменяемым (immutable). Когда Docker запускает контейнер из образа, он добавляет read-write слой сверху (используя UnionFS), в котором ваше приложение работает и может делать изменения. Эти изменения существуют только в слое контейнера и не влияют на исходный образ. Если вы хотите сохранить изменения, нужно создать новый образ с помощью docker commit или переписать Dockerfile.
Один и тот же образ можно использовать неоднократно, не затрагивая содержимое.
Образы находятся в реестрах — серверах, которые принимают, хранят и отдают их по запросу. Самый известный реестр — Docker Hub.
Из образов создаются контейнеры (Container) — специальные среды, в которых работают приложения. Их можно запускать, останавливать и удалять, не меняя исходный образ. Они не мешают друг другу и не затрагивают основную систему.
Образы и контейнеры
Как работает Docker
В основе работы Docker — подход OS-level virtualization. Это значит, что решение выполняет контейнеризацию на уровне операционной системы. Оно не поднимает отдельные ОС под каждое приложение, а организует изолированные контейнеры, которые используют общее ядро хостовой системы. При этом везде собственные процессы, сети и файлы.
Контейнерами управляет Docker Engine. Он состоит из Docker Daemon, который выполняет все активные действия, CLI (Command Line Interface) — командной строки для взаимодействия с Docker, а также REST API.
Принцип работы 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 по его имени Это удобно для приложений с базой данных. Фронтенд будет видеть бэкенд, а бэкенд — базу.
Работа с контейнерамиСоздание и запуск собственного образа
Можно автоматизировать создание образов с помощью 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. Он позволит быстрее разворачивать ПО без настроек собственной инфраструктуры.

