# ---- Builder Stage ---- # На этом этапе мы собираем приложение FROM golang:1.24-alpine AS builder # Устанавливаем рабочую директорию WORKDIR /app RUN apk add --no-cache build-base # Копируем файлы зависимостей и загружаем их # Это позволяет кэшировать слой с зависимостями, если они не менялись COPY go.mod go.sum ./ RUN go mod download # Копируем исходный код COPY . . # Собираем статически слинкованный бинарник. # -w -s флаги убирают отладочную информацию и символы, уменьшая размер. # CGO_ENABLED=0 необходимо для статической линковки и использования from scratch. # TARGETARCH будет автоматически подставлен Docker Buildx (amd64 или arm64). ARG TARGETARCH RUN CGO_ENABLED=1 GOOS=linux GOARCH=${TARGETARCH} go build -ldflags="-w -s" -o /app/bot ./cmd/bot # ---- Final Stage ---- # На этом этапе мы создаем финальный образ FROM scratch # Устанавливаем рабочую директорию WORKDIR /app # Копируем только скомпилированный бинарник из builder'а COPY --from=builder /app/bot /app/bot # Создаем том для хранения данных, например, файла базы данных SQLite VOLUME /data # Указываем, что контейнер будет слушать на этом порту (если потребуется) # EXPOSE 8080 # Команда для запуска приложения ENTRYPOINT ["/app/bot"]