Ответ
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), что позволяет эффективно кэшировать и переиспользовать их между разными образами.
- На основе образа запускаются контейнеры.
Процесс работы:
- Вы пишете
Dockerfile. - Выполняете команду сборки:
docker build -t my-app:latest . - В результате создается Docker Image с тегом
my-app:latest. - Этот образ можно запустить:
docker run my-app:latest.
Аналогия: Dockerfile — это чертеж и список материалов для сборки автомобиля. Docker Image — это собранный, готовый к использованию автомобиль, который можно поставить в гараж (реестр) или начать ездить (запустить контейнер).