Go-Anwendungen hosten
Go-Anwendungen sind der sparsamste Fall: ein einzelnes Programm, wenige Megabyte Image, Start in Millisekunden. Größe S reicht fast immer.
Mehrstufiges Dockerfile
FROM golang:1.23 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app/server ./cmd/server
FROM gcr.io/distroless/static-debian12
COPY --from=build /app/server /server
CMD ["/server"]
Ergebnis: ein Image von wenigen Megabyte, das in Sekunden gebaut und gestartet ist.
Port und Beenden
port := os.Getenv("PORT")
if port == "" { port = "8080" }
srv := &http.Server{Addr: "0.0.0.0:" + port}
// Sauber beenden, wenn die Plattform die Instanz stoppt
go func() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGTERM)
<-c
srv.Shutdown(context.Background())
}()
srv.ListenAndServe()