Wie man Docker-Container mit Dockerfiles erstellt und ausführt

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses Tutorial führt Sie durch den Prozess des Erstellens und Ausführens von Docker-Containern mithilfe von Dockerfiles. Sie werden über die Docker-Architektur lernen, wie man Docker-Images erstellt, Docker-Container verwaltet und skalierbare Docker-Anwendungen deployt. Egal, ob Sie neu in Docker sind oder Ihre bestehenden Kenntnisse verbessern möchten, diese umfassende Anleitung gibt Ihnen das nötige Wissen, um effektiv mit Docker zu arbeiten.

Einführung in Docker

Docker ist eine beliebte Open-Source-Plattform, die es Entwicklern ermöglicht, Anwendungen in einer containerisierten Umgebung zu entwickeln, bereitzustellen und auszuführen. Container sind leichte, eigenständige und autarke Einheiten, die den Code einer Anwendung, ihre Abhängigkeiten und die Laufzeitumgebung in einem einzigen, portablen Paket zusammenfassen. Dieser Ansatz vereinfacht den Prozess der Entwicklung, des Testens und der Bereitstellung von Anwendungen und erleichtert es, sicherzustellen, dass die Anwendung in verschiedenen Rechenumgebungen konsistent läuft.

Was ist Docker?

Docker ist eine Softwareplattform, mit der Sie Anwendungen in Containern entwickeln, bereitstellen und ausführen können. Container sind eine Möglichkeit, eine Anwendung und all ihre Abhängigkeiten in einer einzigen Einheit zu verpacken, die in jeder Rechenumgebung konsistent laufen kann. Dieser Ansatz trägt dazu bei, sicherzustellen, dass die Anwendung unabhängig von der zugrunde liegenden Infrastruktur immer gleich läuft.

Vorteile der Verwendung von Docker

  1. Konsistenz: Container stellen sicher, dass die Anwendung unabhängig von der zugrunde liegenden Infrastruktur immer gleich läuft.
  2. Skalierbarkeit: Container können einfach hoch- oder herunterskaliert werden, um sich an verändernde Anforderungen anzupassen.
  3. Effizienz: Container sind leichtgewichtig und verbrauchen weniger Ressourcen als herkömmliche virtuelle Maschinen.
  4. Portabilität: Container können einfach zwischen verschiedenen Rechenumgebungen wie Entwicklung, Test und Produktion verschoben werden.

Docker-Architektur

Docker verwendet eine Client-Server-Architektur, bei der der Docker-Client mit dem Docker-Daemon kommuniziert, der für das Erstellen, Ausführen und Verwalten von Containern verantwortlich ist. Der Docker-Daemon läuft auf dem Host-Rechner, während der Docker-Client auf demselben Rechner oder auf einem Remote-Rechner laufen kann.

graph TD A[Docker Client] -- Communicates with --> B[Docker Daemon] B -- Manages --> C[Docker Containers] B -- Builds --> D[Docker Images] B -- Stores --> E[Docker Registry]

Erste Schritte mit Docker

Um mit Docker zu beginnen, müssen Sie die Docker-Software auf Ihrem Rechner installieren. Sie können die passende Version für Ihr Betriebssystem von der Docker-Website herunterladen. Sobald Sie Docker installiert haben, können Sie damit beginnen, Ihre Anwendungen in Containern zu entwickeln und auszuführen.

Das Verständnis der Docker-Architektur

Die Docker-Architektur basiert auf einem Client-Server-Modell, bei dem der Docker-Client mit dem Docker-Daemon kommuniziert, um verschiedene Operationen wie das Erstellen, Ausführen und Verwalten von Containern durchzuführen.

Docker-Komponenten

Die Hauptkomponenten der Docker-Architektur sind:

  1. Docker-Client: Der Docker-Client ist die primäre Schnittstelle für Benutzer, um mit Docker zu interagieren. Er ermöglicht es Benutzern, Befehle an den Docker-Daemon zu senden, wie z. B. das Erstellen, Ausführen und Verwalten von Containern.

  2. Docker-Daemon: Der Docker-Daemon ist die serverseitige Komponente der Docker-Architektur. Er ist für die Verwaltung von Docker-Objekten wie Images, Containern, Netzwerken und Volumes verantwortlich.

  3. Docker-Images: Docker-Images sind die Grundlage von Containern. Sie sind schreibgeschützte Vorlagen, die den Anwendungs-Code, die Abhängigkeiten und andere erforderliche Dateien zum Ausführen der Anwendung enthalten.

  4. Docker-Container: Docker-Container sind die laufenden Instanzen von Docker-Images. Sie kapseln die Anwendung und ihre Abhängigkeiten und stellen sicher, dass sie in verschiedenen Umgebungen konsistent läuft.

  5. Docker-Registrys: Docker-Registrys sind die Speicher- und Verteilungssysteme für Docker-Images. Sie ermöglichen es Benutzern, Docker-Images hochzuladen, herunterzuladen und zu teilen.

Diagramm der Docker-Architektur

Das folgende Diagramm veranschaulicht die Docker-Architektur und die Interaktionen zwischen ihren Komponenten:

graph TD A[Docker Client] -- Communicates with --> B[Docker Daemon] B -- Manages --> C[Docker Containers] B -- Builds --> D[Docker Images] B -- Pulls/Pushes --> E[Docker Registry]

Docker-Netzwerk

Docker bietet integrierte Netzwerkfunktionen, um es Containern zu ermöglichen, miteinander und mit der Außenwelt zu kommunizieren. Docker unterstützt mehrere Netzwerk-Treiber, darunter:

  1. Bridge-Netzwerk: Der Standard-Netzwerk-Treiber, der Container verbindet, die auf demselben Host laufen.
  2. Host-Netzwerk: Ermöglicht es einem Container, den Netzwerk-Stack des Hosts zu verwenden und umgeht das Docker-Netzwerk.
  3. Overlay-Netzwerk: Ermöglicht die Kommunikation zwischen Containern, die auf verschiedenen Docker-Hosts laufen.

Docker-Datenverwaltung

Docker bietet zwei Hauptmechanismen zur Verwaltung von Daten in Containern:

  1. Volumes: Persistenter Speicher, der von Docker verwaltet wird und zwischen Containern geteilt werden kann.
  2. Bind Mounts: Ermöglicht es Ihnen, ein Verzeichnis vom Host-Rechner in einen Container einzubinden.

Durch das Verständnis der Docker-Architektur und ihrer verschiedenen Komponenten können Sie Ihre Anwendungen effektiv mit Docker erstellen, bereitstellen und verwalten.

Erstellen von Docker-Images mit Dockerfiles

Dockerfiles sind die Baupläne für die Erstellung von Docker-Images. Sie definieren die Schritte, die erforderlich sind, um ein Docker-Image zu erstellen, einschließlich des Basis-Images, der Installation von Abhängigkeiten und der Konfiguration der Anwendung.

Was ist ein Dockerfile?

Ein Dockerfile ist eine Textdatei, die eine Reihe von Anweisungen und Befehlen enthält, die zum Erstellen eines Docker-Images verwendet werden. Es bietet eine Möglichkeit, den Prozess der Erstellung eines Docker-Images zu automatisieren und sicherzustellen, dass das Image in verschiedenen Umgebungen konsistent und zuverlässig erstellt werden kann.

Dockerfile-Syntax

Dockerfiles verwenden eine spezifische Syntax, um die Schritte für das Erstellen eines Docker-Images zu definieren. Die häufigsten Dockerfile-Anweisungen sind:

Anweisung Beschreibung
FROM Gibt das Basis-Image an, das für den Bauvorgang verwendet werden soll
COPY Kopiert Dateien oder Verzeichnisse vom Host in den Container
RUN Führt einen Befehl im Container während des Bauvorgangs aus
CMD Gibt den Standardbefehl an, der ausgeführt werden soll, wenn der Container startet
EXPOSE Informiert Docker darüber, dass der Container auf den angegebenen Netzwerkports lauscht
ENV Setzt Umgebungsvariablen im Container

Hier ist ein Beispiel für ein Dockerfile, das eine einfache Webanwendung mit Python erstellt:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt.
RUN pip install --no-cache-dir -r requirements.txt

COPY..

CMD ["python", "app.py"]

EXPOSE 5000

Erstellen von Docker-Images

Um ein Docker-Image mit einem Dockerfile zu erstellen, können Sie den Befehl docker build verwenden:

docker build -t my-app.

Dieser Befehl erstellt ein Docker-Image mit dem Tag my-app unter Verwendung des Dockerfiles im aktuellen Verzeichnis.

Hochladen von Docker-Images in eine Registry

Sobald Sie ein Docker-Image erstellt haben, können Sie es in eine Docker-Registry wie Docker Hub oder eine private Registry hochladen, um es mit anderen zu teilen oder in einer Produktionsumgebung bereitzustellen.

docker push my-app:latest

Durch das Verständnis, wie man Dockerfiles erstellt und verwendet, können Sie effektiv Docker-Images für Ihre Anwendungen erstellen und verwalten.

Ausführen und Verwalten von Docker-Containern

Sobald Sie ein Docker-Image erstellt haben, können Sie es verwenden, um Docker-Container auszuführen und zu verwalten. Container sind die laufenden Instanzen von Docker-Images und bieten eine Möglichkeit, Ihre Anwendungen in einer konsistenten und isolierten Umgebung zu verpacken und auszuführen.

Ausführen von Docker-Containern

Um einen Docker-Container auszuführen, können Sie den Befehl docker run verwenden:

docker run -d -p 8080:80 --name my-web-app my-app

Dieser Befehl startet einen neuen Container basierend auf dem my-app-Image, trennt sich vom Ausgabe-Stream des Containers (-d), bildet Port 80 im Container auf Port 8080 auf dem Host ab (-p 8080:80) und weist dem Container den Namen my-web-app zu.

Verwalten von Docker-Containern

Docker bietet mehrere Befehle, um laufende Container zu verwalten:

Befehl Beschreibung
docker ps Listet alle laufenden Container auf
docker stop <container_id> Stoppt einen laufenden Container
docker start <container_id> Startet einen gestoppten Container
docker rm <container_id> Entfernt einen Container
docker logs <container_id> Zeigt die Logs eines Containers an
docker exec -it <container_id> <command> Führt einen Befehl innerhalb eines laufenden Containers aus

Beispielsweise um die Logs eines laufenden Containers anzuzeigen:

docker logs my-web-app

Und um einen Befehl innerhalb eines laufenden Containers auszuführen:

docker exec -it my-web-app bash

Verwaltung des Container-Lebenszyklus

Docker bietet mehrere Befehle, um den Lebenszyklus von Containern zu verwalten:

  • docker create: Erstellt einen neuen Container, startet ihn aber nicht
  • docker start: Startet einen erstellten Container
  • docker stop: Stoppt einen laufenden Container
  • docker restart: Startet einen Container neu
  • docker kill: Sendet ein SIGKILL-Signal an einen laufenden Container
  • docker pause: Pausiert alle Prozesse in einem Container
  • docker unpause: Hebt die Pause eines pausierten Containers auf

Durch das Verständnis, wie man Docker-Container ausführt und verwaltet, können Sie Ihre Anwendungen effektiv mit Docker bereitstellen und skalieren.

Netzwerk- und Datenverwaltung in Docker

Docker bietet integrierte Netzwerk- und Datenverwaltungsfunktionen, um Ihnen zu helfen, Ihre Container zu verbinden und ihre Daten persistent zu speichern.

Docker-Netzwerke

Docker unterstützt mehrere Netzwerk-Treiber, um es Containern zu ermöglichen, miteinander und mit der Außenwelt zu kommunizieren:

  1. Bridge-Netzwerk: Der Standard-Netzwerk-Treiber, der Container verbindet, die auf demselben Host laufen.
  2. Host-Netzwerk: Ermöglicht es einem Container, den Netzwerk-Stack des Hosts zu verwenden und umgeht das Docker-Netzwerk.
  3. Overlay-Netzwerk: Ermöglicht die Kommunikation zwischen Containern, die auf verschiedenen Docker-Hosts laufen.

Sie können Docker-Netzwerke mit den folgenden Befehlen erstellen und verwalten:

## Create a new bridge network
docker network create my-network

## Connect a container to a network
docker run -d --name my-app --network my-network my-app

## Inspect a network
docker network inspect my-network

Docker-Datenverwaltung

Docker bietet zwei Hauptmechanismen zur Verwaltung von Daten in Containern:

  1. Volumes: Persistenter Speicher, der von Docker verwaltet wird und zwischen Containern geteilt werden kann.
  2. Bind Mounts: Ermöglicht es Ihnen, ein Verzeichnis vom Host-Rechner in einen Container einzubinden.

Hier ist ein Beispiel für die Erstellung eines Volumes und das Einbinden in einen Container:

## Create a new volume
docker volume create my-volume

## Run a container and mount the volume
docker run -d --name my-app -v my-volume:/app my-app

In diesem Beispiel wird das my-volume-Volume in das Verzeichnis /app innerhalb des Containers eingebunden.

Best Practices für Netzwerk- und Datenverwaltung

Beachten Sie bei der Arbeit mit Docker-Netzwerken und -Datenverwaltung die folgenden Best Practices:

  1. Verwenden Sie benannte Volumes für die persistente Datenspeicherung.
  2. Vermeiden Sie die Speicherung sensibler Daten in Containern oder Volumes.
  3. Verwenden Sie Overlay-Netzwerke für die Kommunikation zwischen mehreren Hosts.
  4. Isolieren Sie verschiedene Dienste oder Anwendungen mit separaten Netzwerken.
  5. Überwachen und verwalten Sie Netzwerk- und Speicherressourcen, um optimale Leistung und Zuverlässigkeit sicherzustellen.

Durch das Verständnis der Netzwerk- und Datenverwaltungsfunktionen von Docker können Sie Ihre Anwendungen effektiv in einer containerisierten Umgebung erstellen, bereitstellen und skalieren.

Bereitstellen und Skalieren von Docker-Anwendungen

Docker erleichtert es Ihnen, Ihre Anwendungen bereitzustellen und zu skalieren, indem es Tools und Plattformen bietet, die diesen Prozess vereinfachen. In diesem Abschnitt werden wir einige gängige Ansätze für das Bereitstellen und Skalieren von Docker-basierten Anwendungen untersuchen.

Bereitstellen von Docker-Anwendungen

Es gibt mehrere Möglichkeiten, Docker-Anwendungen bereitzustellen, je nach Ihrer Infrastruktur und Ihren Anforderungen:

  1. Docker Compose: Docker Compose ist ein Tool zum Definieren und Ausführen von mehrcontainerigen Docker-Anwendungen. Es ermöglicht es Ihnen, die Dienste, Netzwerke und Volumes Ihrer Anwendung in einer YAML-Datei zu definieren und dann die gesamte Anwendung mit einem einzigen Befehl bereitzustellen.

    version: "3"
    services:
      web:
        image: my-web-app
        ports:
          - 8080:80
      db:
        image: mysql:5.7
        volumes:
          - db-data:/var/lib/mysql
    volumes:
      db-data:
  2. Docker Swarm: Docker Swarm ist ein integriertes Orchestrierungstool, das es Ihnen ermöglicht, einen Cluster von Docker-Hosts zu verwalten und Ihre Anwendungen über mehrere Knoten hinweg bereitzustellen. Es bietet Funktionen wie Lastverteilung, Dienstermittlung und Hochverfügbarkeit.

  3. Kubernetes: Kubernetes ist eine beliebte Open-Source-Container-Orchestrierungsplattform, die zur Bereitstellung und Verwaltung von Docker-basierten Anwendungen verwendet werden kann. Es bietet erweiterte Funktionen wie automatische Skalierung, Selbstheilung und Rolling Updates.

Skalieren von Docker-Anwendungen

Das Skalieren von Docker-Anwendungen kann auf verschiedene Weise erreicht werden:

  1. Horizontales Skalieren: Hinzufügen weiterer Container-Instanzen, um eine erhöhte Last zu bewältigen. Dies kann manuell oder automatisch mit Tools wie Docker Swarm oder Kubernetes erfolgen.

  2. Vertikales Skalieren: Erhöhen der Ressourcen (CPU, Arbeitsspeicher, Speicher) einer Container-Instanz, um mehr Last zu bewältigen.

  3. Lastverteilung: Verteilen des eingehenden Datenverkehrs auf mehrere Container-Instanzen, um die Leistung und Verfügbarkeit zu verbessern.

    graph LR A[Load Balancer] -- Distributes Traffic --> B[Container 1] A -- Distributes Traffic --> C[Container 2] A -- Distributes Traffic --> D[Container 3]
  4. Automatisches Skalieren: Automatisches Skalieren der Anzahl der Container-Instanzen basierend auf vordefinierten Metriken oder Regeln, wie z. B. der CPU-Auslastung oder der Anzahl der Anfragen.

Durch die Nutzung der Bereitstellungs- und Skalierungsfunktionen von Docker können Sie hochskalierbare und widerstandsfähige Anwendungen entwickeln, die sich an sich ändernde Anforderungen und Bedürfnisse anpassen können.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie Docker-Container mit Dockerfiles erstellen und ausführen. Sie haben die Docker-Architektur untersucht, den Prozess der Erstellung von Docker-Images verstanden, Docker-Container verwaltet und die Netzwerk- und Datenverwaltung in Docker kennengelernt. Schließlich haben Sie über das Bereitstellen und Skalieren von Docker-Anwendungen gelernt. Mit diesen Kenntnissen können Sie sich jetzt sicher mit Docker arbeiten, um Ihre Entwicklung- und Bereitstellungsprozesse zu rationalisieren.