Читаем Dockerfile по шагам
FROM, WORKDIR, COPY и CMD: у каждой инструкции своя задача и свой момент выполнения.
После урока вы сможете
- Объяснять четыре основные инструкции
- Различать этапы сборки и запуска
- Записывать команду в exec-форме
FROM и WORKDIR задают исходные условия
FROM выбирает базовый образ. В нашем python:3.12-alpine уже есть интерпретатор и стандартная библиотека. Ваш app.py туда автоматически не попадает: базовый образ не знает ничего о папке проекта.
FROM python:3.12-alpine
WORKDIR /app
WORKDIR назначает текущую папку для последующих инструкций и запуска. Если её ещё нет, Docker создаст её. Абсолютный путь удобнее относительного: результат не зависит от рабочей папки, унаследованной от базового образа. Именно поэтому здесь явно написано /app, а не просто app.
Наличие тега с номером версии полезно для читаемости, но тег может обновляться у издателя. В учебной среде базовый образ заранее подготовлен. В рабочем проекте команда отдельно определяет, когда обновляет базу и как фиксирует точную версию; выбор маленького образа сам по себе не гарантирует воспроизводимость или безопасность.
Подробнее: Рекомендации Docker по базовым образам и WORKDIR.