# Многоэтапная сборка для Go приложения FROM golang:1.21-alpine AS builder # Устанавливаем необходимые пакеты для сборки RUN apk add --no-cache git ca-certificates tzdata # Устанавливаем рабочую директорию WORKDIR /app # Копируем go mod файлы COPY go.mod go.sum ./ # Скачиваем зависимости RUN go mod download # Копируем исходный код COPY . . # Собираем приложение RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . # Финальный образ FROM alpine:latest # Устанавливаем необходимые пакеты для работы RUN apk --no-cache add ca-certificates git tzdata # Создаем пользователя для безопасности RUN addgroup -g 1001 -S appgroup && \ adduser -u 1001 -S appuser -G appgroup # Устанавливаем рабочую директорию WORKDIR /app # Копируем собранное приложение из builder этапа COPY --from=builder /app/main . # Копируем конфигурационные файлы если есть COPY --from=builder /app/config.* ./ # Меняем владельца файлов RUN chown -R appuser:appgroup /app # Переключаемся на непривилегированного пользователя USER appuser # Открываем порт EXPOSE 3000 # Запускаем приложение CMD ["./main"]