41 lines
1.7 KiB
Docker
41 lines
1.7 KiB
Docker
# ---- Builder Stage ----
|
||
# На этом этапе мы собираем приложение
|
||
FROM golang:1.24-alpine AS builder
|
||
|
||
# Устанавливаем рабочую директорию
|
||
WORKDIR /app
|
||
|
||
# Копируем файлы зависимостей и загружаем их
|
||
# Это позволяет кэшировать слой с зависимостями, если они не менялись
|
||
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=0 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"]
|