Ответ
Обязательной и первой значимой инструкцией в Dockerfile является FROM. Она определяет базовый образ, от которого будет наследоваться собираемый образ. Без FROM сборка невозможна.
Синтаксис:
FROM <image>[:<tag>] [AS <name>]
Примеры:
# Использование официального образа с конкретным тегом (рекомендуется)
FROM ubuntu:22.04
# Использование образа для многоэтапной сборки
FROM golang:1.21-alpine AS builder
# Использование минимального образа для финального контейнера
FROM alpine:latest
Ключевые моменты:
- Тег (
:tag): Всегда явно указывайте тег (например,ubuntu:22.04,nginx:1.25-alpine), а не полагайтесь наlatest. Это обеспечивает воспроизводимость сборок и предотвращает неожиданные изменения при обновленииlatest. - Многоэтапные сборки: Инструкция
ARGможет быть объявлена до первогоFROMдля использования в нем, но сам процесс сборки начинается с первогоFROM. Последующие этапы сборки используют новые инструкцииFROM. - Выбор базового образа: Выбор влияет на размер, безопасность и состав финального образа. Для production-контейнеров предпочитаю минимальные образы на основе
alpineилиdistroless.
Плохая практика: FROM ubuntu (неявный latest).
Хорошая практика: FROM ubuntu:22.04 (явная версия).