diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7b3eebb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# ------------------------------------------------------------ +# 1. Build stage +# ------------------------------------------------------------ +FROM golang:1.22-alpine AS builder + +# Install build tools +RUN apk add --no-cache git + +WORKDIR /app + +# Download dependencies first (better caching) +COPY go.mod go.sum ./ +RUN go mod download + +# Copy source +COPY . . + +# Build statically for small final image +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server . + +# ------------------------------------------------------------ +# 2. Final minimal image +# ------------------------------------------------------------ +FROM alpine:3.20 + +# Add non-root user for security +RUN adduser -D -g '' appuser + +WORKDIR /app + +# Copy compiled binary +COPY --from=builder /app/server . + +# Expose Gin port (change if your app uses another) +EXPOSE 8080 + +USER appuser + +CMD ["./server"]