Как создать минимальный рабочий Dockerfile?

«Как создать минимальный рабочий Dockerfile?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Минимальный рабочий 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"]