# syntax=docker/dockerfile:1 # ============================================================================= # GoHorse Jobs Backend - Ultra-Optimized Dockerfile # ============================================================================= # Stage 1: Build FROM mirror.gcr.io/library/golang:1.24-alpine AS builder # Instala dependências necessárias para o build RUN apk add --no-cache git ca-certificates tzdata WORKDIR /build # 1. Cache de Módulos: Copia apenas os arquivos de definição primeiro COPY go.mod go.sum ./ # 2. Download das dependências (Camada pesada que será cacheada) # Removi o comentário do mount e adicionei o download explícito RUN --mount=type=cache,target=/go/pkg/mod \ go mod download && go mod verify # 3. Copia o código fonte (só será executado se o código mudar) COPY cmd ./cmd COPY internal ./internal COPY migrations ./migrations COPY docs ./docs # 4. Build com Cache de Compilação # O uso de --mount=type=cache no /root/.cache/go-build acelera builds subsequentes RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-s -w -X main.Version=$(git describe --tags --always 2>/dev/null || echo 'dev')" \ -trimpath \ -o /app/main ./cmd/api # ----------------------------------------------------------------------------- # Stage 2: Production (scratch) # ----------------------------------------------------------------------------- FROM scratch AS runner # Copia informações de fuso horário e certificados SSL COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ # Copia o binário e as migrations COPY --from=builder /app/main /main COPY --from=builder /build/migrations /migrations # Configurações de execução ENV PORT=8521 \ TZ=America/Sao_Paulo \ GODEBUG=netdns=go \ GOGC=50 EXPOSE 8521 ENTRYPOINT ["/main"]