Из чего состоит Docker-образ и какова его структура?

Ответ

Docker-образ — это неизменяемый (immutable) шаблон, который содержит все необходимое для запуска приложения: код, рантайм, системные инструменты, библиотеки и настройки. Его структура основана на концепции слоев (layers).

Ключевые компоненты Docker-образа:

  1. Файловые слои (Filesystem Layers)

    • Образ состоит из набора слоев, доступных только для чтения (read-only).
    • Каждая инструкция в Dockerfile (например, FROM, RUN, COPY, ADD) создает новый слой поверх предыдущего.
    • Каждый слой представляет собой изменения в файловой системе (добавленные, измененные или удаленные файлы) по сравнению с нижележащим слоем.
    • Эта слоистая архитектура позволяет эффективно кэшировать сборку и экономить дисковое пространство, так как разные образы могут использовать общие слои.
  2. Манифест образа (Image Manifest)

    • Это JSON-файл, который описывает образ. Он действует как "оглавление".
    • Манифест содержит ссылки на все слои, из которых состоит образ, а также на его конфигурационный объект.
  3. Конфигурация образа (Image Configuration)

    • Это еще один JSON-объект, который хранит метаданные, необходимые для запуска контейнера из этого образа.
    • Включает в себя такие параметры, как:
      • Cmd и Entrypoint: команда, которая будет выполнена при запуске контейнера.
      • Env: переменные окружения.
      • ExposedPorts: порты, которые приложение слушает внутри контейнера.
      • WorkingDir: рабочая директория по умолчанию.

Пример связи с Dockerfile

# 1. Базовый слой (содержит ОС Alpine)
FROM alpine:3.14

# 2. Новый слой: копирование файлов приложения
COPY app /app

# 3. Новый слой: установка пакета curl
RUN apk add --no-cache curl

# 4. Метаданные (часть конфигурации образа)
CMD ["/app/run"]

Когда из этого образа запускается контейнер, Docker создает поверх всех read-only слоев образа новый, записываемый слой (writable layer), также известный как "контейнерный слой". Все изменения, которые происходят во время работы контейнера (создание, изменение, удаление файлов), записываются в этот верхний слой.