Golang-Anwendung mit Docker erstellen – Schritt-für-Schritt-Anleitung

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Docker hat die Art und Weise, wie Entwickler Anwendungen erstellen, bereitstellen und verwalten, revolutioniert. In diesem Tutorial lernen Sie, wie Sie Docker nutzen, um eine Golang-Anwendung zu entwickeln und bereitzustellen. Am Ende dieses Leitfadens verfügen Sie über ein fundiertes Verständnis von Docker und wie es Ihren Golang-Entwicklungsprozess verbessern kann.

Docker verstehen

Docker ist eine beliebte Open-Source-Plattform, die Entwicklern ermöglicht, Anwendungen in einer containerisierten Umgebung zu erstellen, bereitzustellen und auszuführen. Sie bietet eine Möglichkeit, eine Anwendung und ihre Abhängigkeiten in eine standardisierte Einheit, den Container, zu verpacken, der einfach in verschiedenen Computing-Umgebungen bereitgestellt und skaliert werden kann.

Was ist Docker?

Docker ist eine Softwareplattform, die es Ihnen ermöglicht, Anwendungen in Containern zu erstellen, bereitzustellen und auszuführen. Container sind leichte, eigenständige und ausführbare Softwarepakete, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird, einschließlich Code, Laufzeitumgebung, Systemtools und Bibliotheken. Dies stellt sicher, dass die Anwendung in verschiedenen Computing-Umgebungen, vom Entwickler-Laptop bis zum Produktionsserver, konsistent und zuverlässig läuft.

Docker-Architektur

Docker folgt einer Client-Server-Architektur, bei der der Docker-Client mit dem Docker-Daemon kommuniziert, der für die Erstellung, Ausführung und Verteilung von Docker-Containern zuständig ist. Der Docker-Daemon läuft auf dem Host-Computer, während der Client auf demselben oder einem Remote-Computer laufen kann.

graph LD subgraph Docker Architektur client[Docker Client] daemon[Docker Daemon] registry[Docker Registry] client -- kommuniziert mit --> daemon daemon -- zieht Images von --> registry daemon -- führt Container aus --> container[Docker Container] end

Docker-Container

Docker-Container sind die grundlegenden Bausteine der Docker-Plattform. Ein Container ist ein leichtgewichtiges, eigenständiges und ausführbares Softwarepaket, das alles enthält, was zum Ausführen einer Anwendung benötigt wird, einschließlich Code, Laufzeitumgebung, Systemtools und Bibliotheken. Container sind voneinander und vom Host-Betriebssystem isoliert, was sicherstellt, dass die Anwendung in verschiedenen Computing-Umgebungen konsistent und zuverlässig läuft.

Docker-Images

Docker-Images sind die Blaupausen für die Erstellung von Docker-Containern. Ein Image ist eine schreibgeschützte Vorlage, die eine Reihe von Anweisungen zum Erstellen eines Docker-Containers enthält. Images werden mithilfe einer Dockerfile erstellt, einer Textdatei, die eine Reihe von Anweisungen zum Erstellen eines Images enthält.

Docker Registry

Docker Registry ist ein Dienst, der Docker-Images speichert und verteilt. Der Docker Registry kann entweder ein öffentlicher Registry, wie Docker Hub, oder ein privater Registry sein, der innerhalb eines Unternehmens gehostet wird.

Vorteile der Verwendung von Docker

  • Konsistente Bereitstellung: Docker-Container stellen sicher, dass Anwendungen auf jedem Computer gleich funktionieren, unabhängig von der zugrunde liegenden Infrastruktur.
  • Skalierbarkeit: Docker ermöglicht es, Anwendungen einfach zu skalieren, indem Sie nach Bedarf Container hinzufügen oder entfernen.
  • Effizienz: Docker-Container sind leichtgewichtig und verbrauchen weniger Ressourcen als herkömmliche virtuelle Maschinen, was sie effizienter macht.
  • Portabilität: Docker-Container können einfach zwischen verschiedenen Computing-Umgebungen, einschließlich Entwicklung, Tests und Produktion, verschoben werden.
  • Isolation: Docker-Container sind voneinander und vom Host-Betriebssystem isoliert, was zur Sicherheit und Zuverlässigkeit von Anwendungen beiträgt.

Durch das Verständnis der grundlegenden Konzepte und der Architektur von Docker können Sie beginnen, Ihre Golang-Anwendungen mithilfe von Docker zu erstellen und bereitzustellen.

Entwicklung einer Golang-App mit Docker

Erstellen einer Golang-Anwendung

Beginnen wir mit der Erstellung einer einfachen Golang-Anwendung. Erstellen Sie ein neues Verzeichnis für Ihr Projekt und navigieren Sie in Ihrem Terminal dorthin. Erstellen Sie dann eine neue Datei namens main.go und fügen Sie den folgenden Code hinzu:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, LabEx!")
    })

    fmt.Println("Server startet auf Port 8080...")
    http.ListenAndServe(":8080", nil)
}

Dieser Code erstellt einen einfachen Webserver, der auf Port 8080 lauscht und mit der Nachricht "Hello, LabEx!" antwortet, wenn die Root-URL (/) aufgerufen wird.

Dockerisierung der Golang-Anwendung

Um diese Golang-Anwendung mit Docker auszuführen, müssen wir eine Dockerfile erstellen. Eine Dockerfile ist eine Textdatei, die eine Reihe von Anweisungen zum Erstellen eines Docker-Images enthält.

Erstellen Sie eine neue Datei namens Dockerfile im selben Verzeichnis wie Ihre main.go-Datei und fügen Sie den folgenden Inhalt hinzu:

## Verwenden Sie das offizielle Golang-Image als Basis-Image
FROM golang:1.16

## Legen Sie das Arbeitsverzeichnis auf /app fest
WORKDIR /app

## Kopieren Sie den Go-Code in den Container
COPY . .

## Erstellen Sie die Go-Anwendung
RUN go build -o main .

## Exponieren Sie Port 8080 für den Webserver
EXPOSE 8080

## Führen Sie die Go-Anwendung beim Starten des Containers aus
CMD ["./main"]

Diese Dockerfile führt Folgendes aus:

  1. Verwendet das offizielle Golang-Image als Basis-Image.
  2. Legt das Arbeitsverzeichnis auf /app fest.
  3. Kopiert den Go-Code in den Container.
  4. Erstellt die Go-Anwendung und benennt die ausführbare Datei in main um.
  5. Exponiert Port 8080 für den Webserver.
  6. Führt die Go-Anwendung beim Starten des Containers aus.

Erstellen des Docker-Images

Erstellen wir nun das Docker-Image für unsere Golang-Anwendung. Führen Sie im Terminal den folgenden Befehl aus:

docker build -t labex/golang-app .

Dieser Befehl erstellt ein Docker-Image mit dem Tag labex/golang-app mithilfe der Dockerfile im aktuellen Verzeichnis.

Ausführen des Docker-Containers

Sobald das Image erstellt wurde, können Sie die Golang-Anwendung in einem Docker-Container mit folgendem Befehl ausführen:

docker run -p 8080:8080 labex/golang-app

Dieser Befehl führt den Container labex/golang-app aus und ordnet Port 8080 auf dem Host Port 8080 im Container zu.

Sie können nun Ihren Webbrowser öffnen und zu http://localhost:8080 navigieren, um die Nachricht "Hello, LabEx!" anzuzeigen.

Mit diesen Schritten haben Sie erfolgreich eine Golang-Anwendung mit Docker entwickelt und bereitgestellt. Im nächsten Abschnitt werden wir untersuchen, wie diese Docker-basierte Golang-Anwendung bereitgestellt werden kann.

Bereitstellung der Docker-basierten Golang-Anwendung

Bereitstellung auf einer Cloud-Plattform

Sobald Ihre Golang-Anwendung als Docker-Image verpackt ist, können Sie sie auf einer Cloud-Plattform wie LabEx Cloud, Amazon Web Services (AWS), Google Cloud Platform (GCP) oder Microsoft Azure bereitstellen. Diese Cloud-Plattformen bieten verwaltete Dienste, die die Bereitstellung und Skalierung Ihrer Docker-basierten Anwendungen vereinfachen.

Hier ist ein Beispiel dafür, wie Sie Ihre Golang-Anwendung auf LabEx Cloud bereitstellen können:

  1. Erstellen Sie ein LabEx Cloud-Konto: Registrieren Sie sich, falls noch nicht geschehen, für ein LabEx Cloud-Konto unter labex.io.
  2. Erstellen Sie ein LabEx Cloud-Projekt: Melden Sie sich an und erstellen Sie ein neues Projekt, um Ihre Golang-Anwendung zu hosten.
  3. Schieben Sie das Docker-Image in den LabEx Cloud-Registry: Verwenden Sie die LabEx Cloud-CLI oder die Webkonsole, um Ihr Docker-Image labex/golang-app in den LabEx Cloud-Registry zu pushen.
  4. Bereitstellen der Docker-basierten Golang-Anwendung: Erstellen Sie in der LabEx Cloud-Konsole eine neue Bereitstellung und wählen Sie das Image labex/golang-app aus dem LabEx Cloud-Registry. Konfigurieren Sie die Bereitstellungseinstellungen, wie z. B. die Anzahl der Replikate, Umgebungsvariablen und Netzwerkoptionen.
  5. Zugriff auf die bereitgestellte Anwendung: Sobald die Bereitstellung abgeschlossen ist, stellt LabEx Cloud Ihnen eine URL oder IP-Adresse zur Verfügung, um auf Ihre Golang-Anwendung zuzugreifen.

Skalierung der Anwendung

Ein Vorteil der Verwendung von Docker für Ihre Golang-Anwendung ist die einfache Skalierung der Anwendung nach Bedarf. Dies kann durch Anpassung der Anzahl der Replikate in Ihrer Bereitstellung oder durch die Verwendung von automatischen Skalierungsfunktionen Ihrer Cloud-Plattform erfolgen.

Beispielsweise können Sie in LabEx Cloud Auto-Scaling-Regeln konfigurieren, um automatisch Replikate hinzuzufügen oder zu entfernen, basierend auf der CPU-Auslastung oder anderen Metriken. Dadurch kann Ihre Anwendung erhöhten Traffic bewältigen, ohne manuelles Eingreifen.

Überwachung und Logging

Um die Gesundheit und Leistung Ihrer Docker-basierten Golang-Anwendung sicherzustellen, ist es wichtig, Überwachung und Logging einzurichten. LabEx Cloud bietet integrierte Überwachungs- und Logging-Funktionen, mit denen Sie wichtige Metriken wie CPU- und Speicherverbrauch, Netzwerkverkehr und Anwendungslogs verfolgen können.

Sie können Ihre Golang-Anwendung auch mit Drittanbieter-Überwachungs- und Logging-Diensten wie Prometheus, Grafana und Elasticsearch integrieren, um detailliertere Einblicke in die Leistung und das Verhalten Ihrer Anwendung zu erhalten.

Continuous Integration und Deployment

Um die Entwicklung und Bereitstellung Ihrer Golang-Anwendung zu optimieren, können Sie eine Continuous Integration (CI) und Continuous Deployment (CD)-Pipeline einrichten. Dies beinhaltet das automatische Erstellen, Testen und Bereitstellen Ihrer Docker-basierten Golang-Anwendung, sobald Änderungen an Ihrem Code vorgenommen werden.

LabEx Cloud bietet native Unterstützung für CI/CD-Pipelines, sodass Sie Ihre Golang-Anwendung einfach mit gängigen Tools wie GitHub Actions, GitLab CI/CD oder Jenkins integrieren können.

Mit diesen Schritten können Sie Ihre Docker-basierte Golang-Anwendung erfolgreich auf einer Cloud-Plattform bereitstellen, nach Bedarf skalieren und Überwachung, Logging sowie CI/CD einrichten, um die Zuverlässigkeit und Skalierbarkeit Ihrer Anwendung sicherzustellen.

Zusammenfassung

In diesem umfassenden Tutorial haben Sie gelernt, wie man eine Golang-Anwendung mithilfe von Docker erstellt. Sie haben die Vorteile der Containerisierung kennengelernt, eine Golang-App entwickelt und diese mithilfe von Docker bereitgestellt. Durch die Nutzung von Docker können Sie Ihren Entwicklungsworkflow optimieren, konsistente Umgebungen gewährleisten und den Bereitstellungsprozess vereinfachen. Dieses Wissen hilft Ihnen, robuste Golang-Anwendungen effizienter zu erstellen und bereitzustellen.