bash
dnf install docker-ce docker-ce-cli
30 июля 2026 г.
16 минут
Рассказываем, что такое Docker, как он работает и зачем нужен в гайде по контейнеризации в экосистеме РЕД ОС.
Начнём чуть издалека, с контейнеризации, на базе которой работает технология Docker.
Контейнеризация — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя. Контейнеры используют общее ядро хост-системы, благодаря чему работают быстрее и эффективнее традиционных виртуальных машин. При контейнеризации отсутствуют дополнительные ресурсные накладные расходы на эмуляцию виртуального оборудования и запуск полноценного экземпляра операционной системы.
Docker — это платформа для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Docker позволяет упаковать программу и всё, что ей нужно для работы, в единый образ контейнера (за исключением хостового ядра). Использование Docker помогает значительно сэкономить ресурсы на поддержку работы всей инфраструктуры.
«Подождите, но если контейнеризация — это метод виртуализации, то в чём разница между контейнерами и виртуальными машинами?» Давайте разбираться:
Виртуальные машины — эмулируют полноценную аппаратную платформу и требуют собственного ядра операционной системы. Виртуальная машина может занимать гигабайты оперативной памяти и десятки гигабайт на жёстком диске, при этом требовать определённого количества времени для запуска.
Docker-контейнеры — используют ядро хоста, занимают мегабайты вместо гигабайтов и запускаются за считанные секунды. А также стоит отметить, что контейнеры не тратят вычислительные ресурсы на програмную эмуляцию устройств.
Ключевое отличие заключается в том, что контейнеры обеспечивают изоляцию на уровне процессов, а не аппаратуры.
Операционная система РЕД ОС полностью совместима с Docker и поддерживает контейнеризацию на уровне ядра. Более того, пользователям доступны сертифицированные средства контейнеризации и оркестрации для построения микросервисной архитектуры на объектах КИИ — они входят в состав Сертифицированной редакции РЕД ОС 8 (сертификат ФСТЭК России № 4060 от 12.01.2019). Компоненты: docker 28.1, kubernetes 1.32 с рантаймом containerd 1.7, — прошли испытания по «Требованиям по безопасности информации к средствам контейнеризации» (Приказ ФСТЭК России от 04 июля 2022 г. №118). Средства контейнеризации также входят в состав серверной лицензии РЕД ОС.
Kubernetes поставляется на диске РЕД ОС 8 с набором образов контейнеров k8s для развертывания кластера в закрытом контуре. Команда разработки постоянно совершенствует продукт: по сравнению с РЕД ОС 7.3, в РЕД ОС 8 был оптимизирован размер образов контейнеров кластера k8s. Объём образов сократился вдвое за счёт меньшего числа пакетов и исполняемых файлов, что также снизило поверхность атаки и повысило безопасность контейнеров.
Новые версии образов контейнеров публикуются в реестре Docker-образов РЕД ОС еженедельно, получая все необходимые обновления безопасности. Политика сопровождения версий Kubernetes в РЕД ОС 8 доступна на нашем сайте.
Теперь, когда мы рассмотрели, что такое Docker, разберём его архитектуру. Docker работает по клиент-серверной модели: демон dockerd управляет контейнерами, а клиент Docker CLI отправляет ему команды. Познакомимся с ними поближе.
Dockerd — это демон (фоновый процесс), который является «сердцем» Docker. Dockerd управляет контейнерами на высоком уровне (API, образы, сети, тома), а непосредственное создание и запуск процессов делегирует рантайму — containerd, который в свою очередь использует runc для работы с ядром Linux. Dockerd постоянно запущен и принимает команды от Docker CLI через Unix-сокет /var/run/docker.sock.
Команда systemctl status docker покажет состояние службы. По умолчанию доступ к dockerd имеет только суперпользователь.
Docker CLI — это интерфейс командной строки, через который пользователь взаимодействует с dockerd. Основные команды Docker CLI:
| Команда | Задача |
|---|---|
| docker pull | Сохранение образов контейнеров из реестров в локальную систему |
| docker rmi | Удаление одного или более образов с хост-узла (по его идентификатору, тегу или дайджесту) |
| docker run -d --name my-container my-image |
Запуск контейнера (опция -d запустит контейнер в фоновом режиме, а ключ --name позволяет задать пользовательское имя для контейнера вместо автоматически генерируемого) |
| docker ps | Показать список запущенных контейнеров |
| docker build | Сборка образа из Dockerfile* |
| docker images | Показать список локальных образов |
| docker stop my-container | Остановка контейнера |
| docker rm my-container | Удаление контейнера |
С полным списком команд можно ознакомиться в Базе Знаний РЕД ОС >>
Dockerfile — это текстовый файл, включающий в себя инструкции по созданию docker-образа. Dockerfile описывает то, что будет находиться в будущем docker-образе, а также языки программирования, переменные среды окружения, расположение файлов, сетевые порты и другие необходимые компоненты и действия контейнера после его запуска.
Для установки средства контейнеризации Docker необходимо выполнить команду (потребуются права администратора):
bash
dnf install docker-ce docker-ce-cli
Затем необходимо запустить сервис контейнеризации Docker и добавить его в автозагрузку:
bash
systemctl enable docker --now
Важно убедиться, что сервис запущен, проверив статус службы:
bash
systemctl status docker
В статусе должно быть отображено active (running).
Для получения информации об установленном Docker можно выполнить команду:
bash
docker info
При корректной настройке будет получен соответствующий ответ от сервиса.
Чтобы разрешить пользователю управлять Docker через CLI, его нужно добавить в группу docker:
bash
usermod -aG docker <имя_пользователя>
и перезагрузить сеанс.
Образ (Image) — это статический «шаблон» для создания Docker-контейнеров. Он содержит все необходимые компоненты и зависимости для запуска приложения. Образы неизменяемы — если нужно внести изменения, создаётся новый образ на основе изменяемого.
Реестр dokcer-образов (реестр) — это специализированное хранилице docker-образов, которое может распологаться как на удалённом сервере, так и на локальном компьютере пользователя.
Реестр образов от РЕД СОФТ — registry.red-soft.ru — содержит образы контейнеров, собранные на основе стандартной и сертифицированной редакций РЕД ОС версии 7.3 и 8.
Контейнер (Container) — это экземпляр образа. Его можно сравнить с объектом, созданным по чертежу: образ — это чертёж, контейнер — это готовый объект. Из одного образа можно создать сколько угодно контейнеров.

Лучший способ запомнить разницу — сравнить образ и контейнер с чертежом и готовым домом:
| Критерий | Образ (Image) | Контейнер (Container) |
|---|---|---|
| Что это | Чертёж дома | Построенный дом |
| Состояние | Статичный, неизменяемый | Живой, работающий |
| Изменения | Невозможны — создаётся новый образ | Возможны, но временные |
| Количество | Один шаблон | Сколько угодно экземпляров |
| Хранение | На диске или в реестре | На диске (пока существует) и в памяти (как работающий процесс) |
Рассмотрим работу с образами и контейнерами в РЕД ОС. Сначала загрузим образ Firebird 5 из реестра:
bash
docker pull registry.red-soft.ru/ubi8/firebird-5
Образ — это статичный шаблон. Он хранится на диске и не меняется. Теперь создадим из него контейнер — запущенный экземпляр:
bash
docker run -d --name my-db -p 3050:3050 registry.red-soft.ru/ubi8/firebird-5
Ключ -p указывает, какой порт пробрасывается с хостовой машины внутрь контейнера.
Контейнер my-db теперь работает — это живой процесс в памяти. Проверить можно командой:
bash
docker ps
Образ контейнера хранится на диске или в реестре, процесс контейнера — также на диске (пока существует) и в памяти (как работающий процесс со своим слоем записи). Из одного образа можно создать сколько угодно контейнеров — как по одному чертежу дома построить целый квартал.
Создадим три контейнера Firebird 5 из одного образа:
bash
docker run -d --name db-prod -p 3051:3050 registry.red-soft.ru/ubi8/firebird-5
docker run -d --name db-test -p 3052:3050 registry.red-soft.ru/ubi8/firebird-5
docker run -d --name db-dev -p 3053:3050 registry.red-soft.ru/ubi8/firebird-5
Docker может использоваться для построения микросервисных архитектур, разработки приложений и более гибкого управления ресурсами организации. Можно привести великое множество сценариев, но сегодня мы остановимся только на самых наглядных.
Контейнеризация перевернула процесс разработки ПО, сделав его быстрым и предсказуемым. Разберём самые популярные сценарии.
Проблема несовместимости версий
Классическая проблема разработки: на одной машине всё работает, ставишь на новое устройство — и приложение превращается в «тыкву». С Docker эта проблема исчезает: всё окружение упаковано в контейнер. Неважно, какая операционная система на новом устройстве — РЕД ОС, Ubuntu или macOS — контейнер будет работать одинаково.
Например, вам нужно развернуть приложение на Python 3.11, а на сервере РЕД ОС установлен Python 3.8. Вместо того, чтобы менять версию операционной системы, достаточно создать Dockerfile с нужной версией Python и запустить контейнер.
Изоляция приложений
На одной машине с РЕД ОС можно запустить несколько контейнеров с разными версиями баз данных, языков программирования или библиотек. Например, на сервере работает Python-приложение А, которому нужна библиотека версии 1.0, и приложение Б, которой нужна та же библиотека, но версии 2.0. Каждое приложение живёт в своей изолированной среде и не пересекается с остальными.
Также изоляция в целом повышает безопасность работы в инфраструктуре:
Изоляция процессов (PID namespace): процессы внутри контейнера видят только себя. Контейнер не знает о других контейнерах и процессах хоста и не может с ними взаимодействовать.
Изоляция пользователей (user namespaces): процесс в контейнере может работать от имени root внутри, но снаружи это обычный непривилегированный процесс хоста.
Ограничение ресурсов (cgroups): если приложение в контейнере утечкой памяти съест всё доступное ОЗУ, оно сломает только себя, не всю систему.
CI/CD и автоматизация сборки
CI/CD автоматизирует процесс сборки. Сервер сборки (GitLab CI, Jenkins, GitHub Actions) собирает приложение, запускает тесты, создаёт docker-образы и разворачивает его на сервере.
Например, команда разрабатывает проект на Java. При каждом коммите в Git-репозиторий CI/CD-система автоматически (при условии существования пайплайна): собирает проект в контейнере, запускает юнит-тесты, проверяет код, создаёт Docker-образ и отправляет его в реестр. Всё это происходит без участия разработчика — он может сосредоточиться на коде.
В корпоративной среде это особенно важно: когда над проектом работают десятки разработчиков, Docker гарантирует, что сборка будет одинаковой на любой машине.
Тестирование в изолированных средах
Тестирование — ещё одна область, где может пригодиться Docker. Каждый тест-запуск можно осуществлять в чистом контейнере, который уничтожается после завершения.
Допустим, вам нужно проверить, как приложение работает с Firebird SQL 3, 4 и 5. Без Docker потребовалось бы устанавливать все версии на одну машину или настраивать несколько виртуальных машин. С Docker достаточно запустить три контейнера с разными версиями баз данных и провести тесты параллельно.

Контейнеризация уменьшает затраты на инфраструктуру и повышает надёжность систем.
Экономия ресурсов инфраструктуры
Контейнеры занимают в среднем в 10-100 раз меньше места, чем виртуальные машины. На одном сервере можно запустить сотни контейнеров вместо десятка виртуальных машин. Это позволяет значительно сэкономить на железе и лицензиях.
Например, компания с 10 сервисами и тремя средами, такими как dev, test и prod использовала 30 виртуальных машин. Переход на Docker позволил разместить все сервисы на 5 виртуальных машинах и сократить ежемесячные расходы на облачную инфраструктуру на 80%. При этом развертывание новой тестовой среды ускорилось с 15 минут до 15 секунд, а разработчики перестали ждать очереди на тестовый стенд.
Микросервисная архитектура
Микросервисная архитектура — это подход, при котором приложение разбивается на независимые сервисы. Каждый сервис живёт в своём контейнере, масштабируется и обновляется независимо.
Например, интернет-магазин может состоять из следующих микросервисов: сервис авторизации (обрабатывает вход пользователей), сервис каталога (управление товарами), сервис заказов (обработка покупок) и сервис уведомлений (email, SMS). Каждый из них — отдельный контейнер.
Если сервис уведомлений перегружается, его можно масштабировать отдельно, не трогая остальные. А если нужно обновить сервис каталога, достаточно пересобрать его Docker-образ и заменить контейнер — остальные сервисы продолжат работать без перерывов.
Масштабирование и отказоустойчивость
Если нагрузка на инфраструктуру растёт, Docker позволяет быстро запустить дополнительные контейнеры на любой машине. Это может пригодиться при сезонных всплесках нагрузки или открытии новых филиалов.
Например, интернет-магазин во время распродажи испытывает всплеск трафика в 10 раз. С Docker Swarm или Kubernetes в РЕД ОС можно автоматически добавить 5 новых контейнеров с бэкендом, а после акции — убрать.
Когда приложение состоит из нескольких сервисов, управлять ими по отдельности становится сложно. И здесь мы плавно подходим к оркестрации — процессу планирования и координации контейнеризированных приложений. А именно: масштабирование, перезапуск контейнеров, балансировка нагрузки, мониторинг состояния системы и в целом создание комфортных условий для работы с многочисленными контейнерами.
Docker Swarm — это «родная» оркестрация Docker, которая напрямую понимает формат docker-compose.yml. Файл Compose можно практически без изменений деплоить в Swarm-кластер через docker stack deploy.
Docker Compose — расширение для Docker и самый простой и легковесный инструмент для базового уровня оркестрации. Он использует декларативный подход (создаётся YAML-файл с описанием желаемого состояния контейнеров) и управляет жизненным циклом связанных контейнеров.
Однако за стандарт индустрии принята оркестрация Kubernetes — платформа, которая обеспечивает операционную устойчивость распределённых приложений в гетерогенных вычислительных средах, реализует спецификацию Container Runtime Interface (CRI) и работает совместно с контейнерными средами исполнения (Docker, containerd, CRI-O).
Kubernetes лучше подходит для работы под нагрузкой, справляется со сложной маршрутизацией трафика. Если Docker Compose удобен в качестве инструмента оркестрации для одного хоста, то Kubernetes «заточен» для работы с несколькими устройствами или целыми дата-центрами. В Базе Знаний РЕД ОС есть подробные инструкции по установке Kubernetes с использованием контейнерного движка containerd.
Обширной теме Kubernetes будет посвящена отдельная статья.
Создаётся файл docker-compose.yml, в котором декларативно описываются сервисы (контейнеры), сети между ними, тома для хранения данных и переменные окружения. Достаточно определить образы, порты, зависимости сервисов друг от друга — и одной командой запустить всё окружение целиком.
Ниже приведена подборка полезных команд для работы с Docker Compose:
| Команда | Задача |
|---|---|
|
docker compose up |
Запустить сервисы в правильном порядке, создав изолированную сеть для взаимодействия контейнеров |
|
docker compose down |
Остановить и удалить контейнеры |
|
docker compose logs |
Получить объединённый вывод всех сервисов для отладки |
|
docker compose up -d |
Запуск контейнера в фоне |
|
docker compose watch |
Автоматическая пересборка при изменении кода |
Если хотите больше погрузиться в тему Docker и приступить к сборке первых docker-образов и запуску контейнеров на РЕД ОС, рекомендуем начать с изучения материалов в нашей Базе Знаний:
– Инструкция по установке и настройке Docker в РЕД ОС
– Задать вопрос в сообществе пользователей РЕД ОС: в Telegram и в MAX
Была ли статья полезной?
Примечания к статье
РЕД ОС — российская операционная система, проверенная 2 миллионами инсталляций и обеспечивающая стабильную работу корпоративных сервисов на серверах и рабочих станциях. Разработчик гарантирует длительную поддержку версий — более 5 лет. РЕД ОС позволяет строить функциональные ИТ-инфраструктуры для комфортного перехода с зарубежных решений.