# DanceLessonsCoach Docker Image # Multi-stage build for production deployment # Stage 1: Build binary FROM golang:1.26.1-alpine AS builder WORKDIR /app # Copy go mod files COPY go.mod go.sum ./ RUN go mod download # Copy source code COPY . ./ # Install swag and generate Swagger docs only if they don't exist RUN if [ ! -f pkg/server/docs/swagger.json ]; then \ echo "📝 Generating Swagger documentation..." && \ go install github.com/swaggo/swag/cmd/swag@latest && \ cd pkg/server && go generate && \ echo "✅ Swagger documentation generated"; \ else \ echo "✅ Swagger documentation already exists, skipping swag installation and generation"; \ fi # Build binary RUN CGO_ENABLED=0 GOOS=linux go build -o /dance-lessons-coach ./cmd/server # Stage 2: Final image FROM alpine:3.18 WORKDIR /app # Install dependencies RUN apk add --no-cache ca-certificates tzdata # Copy binary from builder COPY --from=builder /dance-lessons-coach /app/dance-lessons-coach # Copy configuration COPY config.yaml /app/config.yaml # Set permissions RUN chmod +x /app/dance-lessons-coach # Set timezone ENV TZ=UTC # Expose port EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=3s \ CMD wget -q --spider http://localhost:8080/api/health || exit 1 # Entry point ENTRYPOINT ["/app/dance-lessons-coach"]