Сколько может быть инструкций FROM в Dockerfile
1️⃣ Как кратко ответить
В Dockerfile может быть несколько инструкций FROM. Каждая инструкция FROM создает новый этап сборки, позволяя использовать многоэтапную сборку для оптимизации образов.
2️⃣ Подробное объяснение темы
Dockerfile — это текстовый файл, содержащий инструкции для сборки Docker-образа. Одна из ключевых инструкций в Dockerfile — это инструкция FROM. Она определяет базовый образ, на основе которого будет строиться новый образ.
Зачем нужны несколько инструкций FROM
Использование нескольких инструкций FROM в Dockerfile позволяет создавать многоэтапные сборки. Это полезно для оптимизации размера конечного образа и разделения процесса сборки на логические этапы. Например, можно использовать один этап для компиляции приложения и другой для создания минимального образа, содержащего только необходимые для запуска файлы.
Как это работает
Каждая инструкция FROM в Dockerfile начинает новый этап сборки. Все инструкции, следующие за FROM, применяются к текущему этапу, пока не встретится следующая инструкция FROM. Это позволяет использовать разные базовые образы для разных этапов и копировать артефакты между ними.
Пример многоэтапной сборки
# Первый этап: сборка приложения
FROM golang:1.17 AS builder
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app
# Копируем файлы проекта в контейнер
COPY . .
# Компилируем приложение
RUN go build -o myapp
​
# Второй этап: создание минимального образа
FROM alpine:latest
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /root/
# Копируем скомпилированное приложение из предыдущего этапа
COPY --from=builder /app/myapp .
# Указываем команду для запуска приложения
CMD ["./myapp"]
Объяснение примера
-
Первый этап (FROM golang:1.17 AS builder):
- Используется образ
golang:1.17для компиляции Go-приложения. - Устанавливается рабочая директория
/app. - Копируются все файлы проекта в контейнер.
- Выполняется команда
go build, которая компилирует приложение и создает исполняемый файлmyapp.
- Используется образ
-
Второй этап (FROM alpine:latest):
- Используется минимальный образ
alpine:latestдля создания конечного образа. - Устанавливается рабочая директория
/root/. - Копируется скомпилированное приложение
myappиз первого этапа. - Указывается команда
CMD ["./myapp"]для запуска приложения при старте контейнера.
- Используется минимальный образ
Применение
Многоэтапные сборки особенно полезны для уменьшения размера конечного образа, так как в него попадают только необходимые для выполнения приложения файлы. Это улучшает производительность развертывания и снижает затраты на хранение.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться