## Главные компоненты Docker
1. демон Docker (Docker daemon), ответственный за создание, запуск и контроль работы контейнеров, а также за создание и хранение образов.
2. клиент Docker. Используется для диалога с демоном Docker по протоколу HTTP. По умолчанию это соединение устанавливается через сокет домена Unix, но также может использоваться TCP-сокет для поддержки соединений с удаленными клиентами или дескриптор файла для сокетов, управляемых systemd. Так как все операции обмена данными выполняются по протоколу HTTP, можно без затруднений организовать соединение с удаленными демонами Docker и разработать привязки (bindings) к нужному языку программирования, но при этом следует учитывать особенности реализации этих возможностей, например обязательное наличие контекста создания (building context), описанного в соответствующем разделе данной книги. Интерфейсы прикладного программирования, используемые для организации обмена данными с демоном, четко определены и подробно документированы, что позволяет разработчикам писать программы, взаимодействующие напрямую с демоном, без использования клиента Docker. Клиент и демон Docker распространяются как отдельные независимые бинарные файлы.
3. Реестры Docker используются для хранения и распространения образов. Реестром, выбираемым по умолчанию, явялется Docker Hub, на котором хранятся тысячи общедоступных образов, а также управляемые «официальные» образы.
### Базовые технологии
Демон Docker использует «драйвер выполнения» (execution driver) для создания контейнеров. По умолчанию выбирается собственный драйвер Docker runc. Драйвер runc очень тесно связан со следующими механизмами ядра:
1. cgroups – механизм, отвечающий за управление ресурсами, используемыми контейнером (процессор, оперативная память и т. д.). Механизм cgroups также обеспечивает выполнение операций «замораживания» (freezing) и «размораживания» (unfreezing) контейнеров как поддержку функциональности команды docker pause.
2. пространства имен (namespaces) отвечают за изоляцию контейнеров, гарантируют, что файловая система, имя хоста, пользователи, сетевая среда и процессы любого контейнера полностью отделены от остальной части системы.
Еще одной основополагающей технологией для Docker является файловая система с каскадно-объединенным монтированием (Union File System – UnionFS), обеспечивающая хранение уровней для контейнеров. Функциональность UnionFS обеспечивается одним из нескольких драйверов файловой системы: AUFS, devicemapper, BTRFS или Overlay.
#### Сопровождающие технологии
1. Swarm – решение задачи кластеризации от Docker. Swarm позволяет сгруппировать несколько Docker-хостов, после чего пользователь может работать с этой группой как с единым ресурсом.
2. Docker Compose – инструмент для создания и выполнения приложений, скомпонованных из нескольких Docker-контейнеров. Такие компоновки используются главным образом при разработке и тестировании, но гораздо реже в производственной среде.
3. Docker Machine устанавливает и конфигурирует Docker-хосты на локальных и удаленных ресурсах. Кроме того, Machine конфигурирует клиента Docker, упрощая процедуру переключения между средами.
4. Kitematic представляет собой графический пользовательский интерфейс для операционных систем Mac OS и Windows, обеспечивающий запуск и управление контейнеров Docker.
5. Docker Trusted Registry – локально устанавливаемое программное решение для хранения и управления образами Docker. В действительности это локальная версия реестра Docker Hub, которую можно объединить с существующей инфраструктурой обеспечения безопасности и согласовать с правилами хранения и обеспечения защиты данных, принятых в конкретной организации. Все функциональные возможности локального реестра, в том числе различные метрики, управление доступом на основе ролей (Role-based access control – RBAC) и регистрационные журналы, контролируются через административную консоль.