Как работает Docker

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

Ответ

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

1. Основа: namespaces и cgroups.

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

2. Сборка образа (Image). Образ — это неизменяемый шаблон, собираемый из слоев по инструкциям в Dockerfile.

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Каждая инструкция (FROM, RUN, COPY) создает новый слой. Это позволяет кэшировать слои и быстро пересобирать образы.

3. Запуск контейнера. При команде docker run Docker Engine:

  • Скачивает или берет локальный образ.
  • Создает новый набор namespaces и cgroups.
  • Внутри этого изолированного пространства монтирует слои образа в единую файловую систему (через UnionFS, например, overlay2).
  • Запускает процесс, указанный в CMD или ENTRYPOINT.

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