Из чего состоит Docker-контейнер?

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

Ответ

Docker-контейнер — это запущенный экземпляр Docker-образа. Его структура многослойна и состоит из:

  1. Базовый образ (Image Layers) — набор неизменяемых (read-only) слоёв файловой системы, которые берутся из образа (например, ubuntu:latest). Эти слои общие для всех контейнеров, созданных из одного и того же образа, что экономит место на диске.
  2. Слой записи (Container Layer / Writeable Layer) — тонкий изменяемый слой, создаваемый поверх слоёв образа при запуске контейнера. Все изменения файловой системы (создание, модификация, удаление файлов) происходят именно в этом слое. При удалении контейнера этот слой также удаляется (если только данные не сохранены в томе).
  3. Метаданные и конфигурация контейнера — это данные, которые не являются частью файловой системы образа, но определяют поведение контейнера:
    • Сетевые настройки (IP-адрес, порты, bridge network).
    • Переменные окружения.
    • Команда запуска (CMD/ENTRYPOINT).
    • Подключённые тома (volumes) и bind mounts.
    • Ограничения ресурсов (CPU, память).
    • Изоляция пространств имён (namespace) и контрольные группы (cgroups).

Визуализация и проверка:

# Запустить контейнер в фоновом режиме
docker run -d --name my_web -p 8080:80 nginx:alpine

# Просмотреть детальную информацию о контейнере в формате JSON
# В выводе можно найти данные о слоях, сети, конфигурации.
docker inspect my_web

# Посмотреть список слоёв образа, из которого запущен контейнер
docker history nginx:alpine

# Просмотреть процессы внутри контейнера
docker top my_web

# Проверить использование ресурсов контейнера
docker stats my_web

Ключевой принцип: Неизменяемость образа + изменяемый слой контейнера = предсказуемость и воспроизводимость среды выполнения.