Okay, Team! Wir bringen unsere Go-API auf die nächste Ebene, indem wir sie dockerisieren und, was noch wichtiger ist, sie mit mehrstufigen Builds leicht und effizient machen. Am Ende dieses Beitrags verfügen Sie über eine API, die nicht nur portierbar, sondern auch für schnellere Bereitstellungen optimiert ist. ?
Mehrstufige Builds ermöglichen es uns, unser endgültiges Docker-Image schlank zu halten, indem wir die Build--Umgebung von der Laufzeitumgebung trennen. Für Go-Anwendungen ist dies besonders nützlich, da wir die Anwendung in einem Schritt erstellen können (mit allen erforderlichen Tools und Abhängigkeiten) und dann nur die resultierende Binärdatei in ein kleineres, endgültiges Image kopieren können.
Vorteile mehrstufiger Builds:
Lassen Sie uns eine Docker-Datei erstellen, die einen mehrstufigen Build nutzt. Dies wird uns helfen, unsere Go-API für die Produktion zu optimieren, indem wir die endgültige Bildgröße reduzieren.
Erstellen Sie im Stammverzeichnis Ihres Projekts eine Docker-Datei mit folgendem Inhalt:
# Build stage FROM golang:1.21.0-alpine3.17 AS builder WORKDIR /app COPY . . # Install dependencies and build the application RUN go mod download RUN go build -o main . # Run stage (lightweight) FROM alpine:3.18.3 WORKDIR /app # Copy the binary from the builder stage COPY --from=builder /app/main . # Expose the API port EXPOSE 8000 # Run the binary CMD ["/app/main"]
Builder-Phase:
Laufzeitphase:
Mit diesem Ansatz enthält unser endgültiges Bild nur das, was zum Ausführen der API erforderlich ist, was zu einem deutlich kleineren Bild führt.
Da wir nun unsere optimierte Docker-Datei haben, erstellen wir das Docker-Image und führen es aus.
docker build -t my-go-api .
docker run -p 8000:8000 my-go-api
Ihre API sollte unter http://localhost:8000 ausgeführt werden, genau wie auf Ihrem lokalen Computer!
Für eine noch weitere Optimierung können Sie die Alpine-Laufzeitstufe durch das Scratch-Bild ersetzen. Das Scratch-Image ist völlig leer – kein Betriebssystem, keine Dienstprogramme – was zu einer noch kleineren Image-Größe führt. Dies bedeutet jedoch auch, dass Sie keinen Zugriff auf Debugging-Tools im Container haben.
So würde die Docker-Datei mit dem Scratch-Image aussehen:
# Build stage FROM golang:1.21.0-alpine3.17 AS builder WORKDIR /app COPY . . RUN go mod download RUN go build -o main . # Run stage FROM scratch WORKDIR /app COPY --from=builder /app/main . EXPOSE 8000 CMD ["/app/main"]
Dieser Ansatz kann die endgültige Bildgröße auf nur 10-15 MB reduzieren! Bedenken Sie jedoch, dass die Verwendung von Scratch am besten für sehr einfache, eigenständige Anwendungen geeignet ist.
Testen wir unseren Container, um sicherzustellen, dass er wie erwartet funktioniert:
curl http://localhost:8000/books
Wenn Ihre API richtig reagiert, dann herzlichen Glückwunsch! Sie haben Ihre Go-API erfolgreich mit Docker optimiert und containerisiert. ?
Jetzt, da Ihre API Docker-fähig und für die Produktion optimiert ist, sind Sie für eine reibungslose Bereitstellung und Skalierung gerüstet! Beim nächsten Mal schalten wir den Gang um und stürzen uns in Unit-Tests für Go, um sicherzustellen, dass Ihre API nicht nur bereitstellbar, sondern auch grundsolide ist. ??
Behalten Sie außerdem mein ThrottleX GitHub-Repo im Auge, um Updates zu erhalten – ich werde bald ein Tutorial zur Integration meines benutzerdefinierten Ratenbegrenzers veröffentlichen!
Das obige ist der detaillierte Inhalt vonDockerisieren Sie Ihre Go-API mit mehrstufigen Builds. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!