43 lines
819 B
Docker
43 lines
819 B
Docker
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" ]
|