В чем разница между Dockerfile и Docker Image?

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

Ответ

Dockerfile и Docker Image — это два этапа в жизненном цикле контейнеризации: рецепт и готовый продукт.

Dockerfile — это текстовый файл-инструкция, содержащий пошаговые команды для сборки образа.

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

Пример простого Dockerfile для Python-приложения:

# 1. Базовый образ
FROM python:3.9-slim
# 2. Установка рабочей директории
WORKDIR /app
# 3. Копирование зависимостей и их установка
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 4. Копирование исходного кода приложения
COPY . .
# 5. Команда для запуска контейнера
CMD ["python", "app.py"]

Docker Image — это неизменяемый (immutable) исполняемый пакет, созданный в результате выполнения инструкций Dockerfile.

  • Это готовый артефакт, который можно хранить в реестре (Docker Hub, GitLab Registry).
  • Состоит из слоев (layers), что позволяет эффективно кэшировать и переиспользовать их между разными образами.
  • На основе образа запускаются контейнеры.

Процесс работы:

  1. Вы пишете Dockerfile.
  2. Выполняете команду сборки: docker build -t my-app:latest .
  3. В результате создается Docker Image с тегом my-app:latest.
  4. Этот образ можно запустить: docker run my-app:latest.

Аналогия: Dockerfile — это чертеж и список материалов для сборки автомобиля. Docker Image — это собранный, готовый к использованию автомобиль, который можно поставить в гараж (реестр) или начать ездить (запустить контейнер).