FROM golang:1.24.4-alpine3.22@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a AS base # Set up workdir WORKDIR /app # Install dependencies COPY go.mod go.sum ./ RUN go mod download # ---- Build mode ---- FROM base AS build WORKDIR /app # Copy code, and compile COPY . . RUN go build -o server main.go # ---- Production mode ---- FROM alpine@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715 AS prod WORKDIR /app # Copy built binary COPY --from=build /app/server . # Expose 8080 port EXPOSE 8080 # Run server binary on start CMD ["./server"] # ---- Development mode ---- FROM base AS dev # Install air for hot reloading RUN go install github.com/air-verse/air@latest # Copy code, and expose port COPY . . EXPOSE 8080 # Enable hot reloading for go CMD [ "air" ]