# build stage FROM golang:alpine AS build WORKDIR /app # Copy the source from the current directory to the Working Directory inside the container COPY . ./ # download needed modules RUN apk add --no-cache --update go gcc g++ && \ go mod download && \ CGO_ENABLED=1 GOOS=linux go build -o /htwkalender # production stage FROM alpine:latest AS prod WORKDIR /htwkalender ARG USER=ical RUN adduser -Ds /bin/sh $USER && \ chown $USER:$USER ./ USER $USER RUN mkdir -p data # copies executable from build container COPY --chown=$USER:$USER --from=build /htwkalender ./ # Expose port 8090 to the outside world EXPOSE 8090 ENTRYPOINT ["./htwkalender", "serve"] FROM golang:1.21.6 AS dev # Set the Current Working Directory inside the container WORKDIR /htwkalender # Copy go mod and sum files COPY go.mod go.sum ./ RUN go mod download # Copy the source from the current directory to the Working Directory inside the container COPY *.go ./ COPY . . # Build the Go app RUN CGO_ENABLED=1 GOOS=linux go build -o /htwkalender # Expose port 8090 to the outside world EXPOSE 8090 # Entry point ENTRYPOINT ["./htwkalender", "serve"]