Ответ
Docker-образ (Image) — это неизменяемый (immutable) шаблон, который содержит все необходимое для запуска приложения: код, среду выполнения (runtime), системные утилиты, библиотеки и настройки.
Образ является «чертежом» для создания контейнеров. Один образ можно использовать для запуска множества идентичных контейнеров.
Структура образа:
Образ состоит из набора слоев (layers), доступных только для чтения. Каждый слой представляет собой инструкцию из Dockerfile. Эта слоистая структура позволяет эффективно управлять образами:
- Кэширование: При пересборке образа Docker переиспользует неизмененные слои, что значительно ускоряет процесс.
- Экономия места: Разные образы могут использовать общие базовые слои, избегая дублирования данных.
Жизненный цикл: от Dockerfile до контейнера
- Dockerfile: Текстовый файл с инструкциями по сборке образа.
- Сборка: Команда
docker buildчитаетDockerfileи создает образ. - Реестр: Образы хранятся и распространяются через реестры (например, Docker Hub, AWS ECR).
- Запуск: Команда
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"]