Архитектура Docker

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




Клиент-серверная архитектура Docker

В основе Docker лежит клиент-серверная модель, обеспечивающая взаимодействие между пользователем и системой управления контейнерами.

  • Клиент (docker CLI) — это командная утилита, которую пользователь запускает для создания, управления и мониторинга контейнеров. Она отправляет команды на сервер с помощью RESTful API.
  • Docker Daemon (dockerd) — это фоновый процесс, запущенный на хост-системе. Именно он обрабатывает команды клиента, управляет контейнерами, образами, сетями и хранилищами.
Схема архитектуры Docker
Схема архитектуры Docker

Основные компоненты Docker

Контейнеры

Контейнер — это изолированное окружение, в котором запускается приложение. Он основан на образе и использует технологии ядра Linux для изоляции.

Контейнеры:

  • не имеют своей ОС, а используют ядро хоста;
  • легковесны по сравнению с виртуальными машинами;
  • быстро запускаются и останавливаются;
  • по идеологии Docker: один контейнер — одно приложение.
Контейнер и его изоляция
Контейнер и его изоляция

Образы (Images)

Образ — это шаблон файловой системы и метаданных, необходимых для запуска контейнера. Он состоит из нескольких слоев, каждый из которых может дополнять предыдущий.

Особенности:

  • слои образов — только для чтения;
  • возможны наложения с помощью AUFS, Btrfs, OverlayFS и др.;
  • создание новых образов возможно через Dockerfile или сохранением состояния контейнера.
Слои образа Docker

Реестры (Registries)

Реестр Docker — это централизованное хранилище образов. Он может быть:

  • публичным (например, Docker Hub);
  • приватным (для внутреннего использования в компании).

Реестры состоят из репозиториев, которые, в свою очередь, содержат разные версии образов.


Технологии ядра Linux, лежащие в основе Docker

Docker использует стандартные технологии ядра Linux для обеспечения изоляции, ограничения и безопасности.

Контрольные группы (cgroups)

Cgroups позволяют ограничивать, приоритизировать и отслеживать использование ресурсов процессами.

Примеры контроллеров:

  • cpu — ограничивает использование CPU;
  • memory — лимитирует использование памяти;
  • blkio — контролирует I/O операции;
  • devices — управляет доступом к устройствам;
  • net_cls, freezer, perf_event и др.
Контрольные группы

Пространства имен (Namespaces)

Namespaces обеспечивают изоляцию контейнеров. Каждый контейнер видит только свою часть системы.

Типы пространств имен:

  • PID — процессы;
  • NET — сетевые интерфейсы;
  • MNT — точки монтирования;
  • UTS — хостнейм и информация о системе;
  • IPC — взаимодействие между процессами;
  • USER — пользователи и UID.
Пространства имен

Привилегии и Capabilities

По умолчанию контейнеры запускаются с урезанными привилегиями. Это обеспечивает безопасность и предотвращает выполнение вредоносных операций.

Система Linux Capabilities позволяет разделить привилегии root-пользователя на отдельные флаги (например, CAP_NET_ADMIN, CAP_SYS_TIME) и управлять ими гибко.

Можно разрешать или запрещать:

  • монтирование устройств;
  • доступ к сокетам;
  • изменение владельцев и атрибутов файлов и др.
Привилегии контейнера

Безопасность контейнеров

Для дополнительной безопасности в Docker могут использоваться мандатные системы контроля доступа:

  • SELinux (Security-Enhanced Linux);
  • AppArmor — профилирующая система безопасности.

Они позволяют создавать строгие политики, ограничивающие поведение контейнеров.


Заключение

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

Такая архитектура делает Docker универсальным решением — от разработки до промышленного развёртывания и масштабирования.

Was this helpful?

1 / 0

Добавить комментарий 0