На каких ключевых технологиях и принципах базируется Docker?

«На каких ключевых технологиях и принципах базируется Docker?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker построен на нескольких фундаментальных технологиях Linux и принципах проектирования:

  1. Namespaces (Пространства имён): Обеспечивают изоляцию. Каждый контейнер получает свои собственные изолированные экземпляры:

    • PID (процессы), NET (сеть), MNT (файловые системы), UTS (hostname), IPC (межпроцессное взаимодействие), User (UID/GID).
  2. Control Groups (cgroups): Ограничивают и отслеживают использование ресурсов (CPU, память, диск I/O, сеть) для каждого контейнера.

  3. Union File Systems (OverlayFS, AUFS): Позволяют создавать образы слоями. Это основа для эффективного кэширования, легковесности образов и их неизменяемости. Каждая инструкция в Dockerfile создает новый слой.

  4. Контейнерная виртуализация (на уровне ОС): В отличие от виртуальных машин, контейнеры разделяют ядро хостовой ОС, что делает их быстрыми и легковесными.

  5. Принцип immutable infrastructure: Образ контейнера — неизменяемый артефакт. Для обновления приложения создается новый образ и разворачивается новый контейнер, а не изменяется работающий.

Пример на практике: Когда вы запускаете docker run nginx, Docker Engine использует cgroups для ограничения ресурсов, namespaces для изоляции, а образ, собранный на основе UnionFS, монтируется как корневая файловая система контейнера.