Что такое Docker-образ и из чего он состоит

Ответ

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

Образ является «чертежом» для создания контейнеров. Один образ можно использовать для запуска множества идентичных контейнеров.

Структура образа:

Образ состоит из набора слоев (layers), доступных только для чтения. Каждый слой представляет собой инструкцию из Dockerfile. Эта слоистая структура позволяет эффективно управлять образами:

  • Кэширование: При пересборке образа Docker переиспользует неизмененные слои, что значительно ускоряет процесс.
  • Экономия места: Разные образы могут использовать общие базовые слои, избегая дублирования данных.

Жизненный цикл: от Dockerfile до контейнера

  1. Dockerfile: Текстовый файл с инструкциями по сборке образа.
  2. Сборка: Команда docker build читает Dockerfile и создает образ.
  3. Реестр: Образы хранятся и распространяются через реестры (например, Docker Hub, AWS ECR).
  4. Запуск: Команда docker run создает из образа работающий экземпляр — контейнер.

Пример Dockerfile с пояснением слоев:

# --- Слой 1: Базовый образ с Python ---
FROM python:3.9-slim

# --- Слой 2: Установка рабочей директории ---
WORKDIR /app

# --- Слой 3: Копирование файла зависимостей ---
# Этот слой будет кэширован, если requirements.txt не изменился
COPY requirements.txt .

# --- Слой 4: Установка зависимостей ---
RUN pip install --no-cache-dir -r requirements.txt

# --- Слой 5: Копирование исходного кода приложения ---
COPY . .

# --- Метаданные: Команда для запуска при старте контейнера (не создает слой) ---
CMD ["python", "./main.py"]