Ответ
Минимальный рабочий Dockerfile должен начинаться с инструкции FROM, которая определяет базовый образ. Просто пустой файл не сработает.
Абсолютный минимум:
FROM alpine:latest
Этот Dockerfile создаст образ на основе Alpine Linux, но он не будет выполнять никакой полезной работы.
Базовый практический пример для DevOps (статический веб-сайт):
# 1. Определяем базовый образ (лучше с конкретной версией для воспроизводимости)
FROM nginx:1.23-alpine
# 2. Устанавливаем метаданные (опционально, но рекомендуется)
LABEL maintainer="devops-team@company.com"
# 3. Копируем файлы приложения в образ
COPY ./src /usr/share/nginx/html
# 4. Экспонируем порт, который использует приложение
EXPOSE 80
# 5. Команда по умолчанию для запуска контейнера
CMD ["nginx", "-g", "daemon off;"]
Ключевые инструкции для DevOps-сценариев:
FROM— основа. Часто используемalpineдля минимального размера илиdistrolessдля безопасности.COPY/ADD— добавление кода и конфигов в образ.RUN— выполнение команд для сборки (установка пакетов, компиляция).WORKDIR— установка рабочей директории.USER— смена пользователя (не запускать от root).HEALTHCHECK— настройка проверки здоровья контейнера.
Пример многоэтапной сборки для Go-приложения (оптимизация размера):
# Этап сборки
FROM golang:1.19 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /myapp
# Финальный этап
FROM gcr.io/distroless/static-debian11
COPY --from=builder /myapp /myapp
USER nonroot:nonroot
ENTRYPOINT ["/myapp"]