Erstellung von Docker-Containern mit einer benutzerdefinierten Dockerfile

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 der Erstellung eines benutzerdefinierten Docker-Images mithilfe einer Dockerfile, der Bereitstellung und Verwaltung von Docker-Anwendungen. Sie lernen den Befehl zum Erstellen eines Docker-Images aus einer benutzerdefinierten Dockerfile kennen, um Ihren Containerisierungs-Workflow zu optimieren und Anwendungen effizienter bereitzustellen.

Einführung in Docker-Container

Docker ist eine beliebte Open-Source-Plattform, die Entwicklern ermöglicht, Anwendungen in einer containerisierten Umgebung 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.

Was ist Docker?

Docker ist ein Werkzeug, das die Erstellung, Bereitstellung und Ausführung von Anwendungen mithilfe von Containern vereinfacht. Container ermöglichen es einem Entwickler, eine Anwendung mit allen benötigten Komponenten wie Bibliotheken und anderen Abhängigkeiten zu verpacken und als ein Paket auszuliefern.

Vorteile von Docker-Containern

  1. Portabilität: Docker-Container können konsistent auf jeder Umgebung laufen, vom lokalen Rechner des Entwicklers bis zu Produktions-Servern, wodurch sichergestellt wird, dass die Anwendung sich unabhängig von der zugrundeliegenden Infrastruktur gleich verhält.
  2. Skalierbarkeit: Docker ermöglicht es, Anwendungen nach Bedarf zu skalieren, indem Container hinzugefügt oder entfernt werden.
  3. Effizienz: Docker-Container sind leichtgewichtig und teilen sich den Host-Betriebssystemkern, was sie effizienter macht als traditionelle virtuelle Maschinen.
  4. Konsistenz: Docker stellt sicher, dass die Anwendung sich von der Entwicklung bis zur Produktion gleich verhält und das Problem "funktioniert auf meinem Rechner" beseitigt.

Docker-Architektur

Docker verwendet eine 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.

graph LD subgraph Docker Architektur client[Docker Client] daemon[Docker Daemon] client -- API --> daemon daemon -- Images --> registry[Docker Registry] end

Docker-Container vs. virtuelle Maschinen

Während sowohl Container als auch virtuelle Maschinen (VMs) den Zweck erfüllen, Anwendungen in isolierten Umgebungen auszuführen, gibt es einige wichtige Unterschiede:

Merkmal Docker-Container Virtuelle Maschinen
Isolation Container teilen sich den Host-Betriebssystemkern, was eine leichtere Isolation bietet. VMs verfügen über ein eigenes komplettes Betriebssystem, was eine stärkere Isolation bietet.
Ressourcenverbrauch Container sind effizienter, da sie die Ressourcen des Hosts teilen und kein komplettes Betriebssystem ausführen müssen. VMs benötigen mehr Ressourcen, da jede VM über ein eigenes Betriebssystem verfügt.
Startzeit Container können in Sekunden starten, da sie kein komplettes Betriebssystem booten müssen. VMs können Minuten benötigen, um zu starten, da sie das gesamte Betriebssystem booten müssen.

Erste Schritte mit Docker

Um mit Docker zu beginnen, müssen Sie die Docker-Engine auf Ihrem System installieren. Sie können Docker von der offiziellen Docker-Website (https://www.docker.com/get-started) herunterladen und installieren. Nach der Installation können Sie Docker verwenden, um Ihre Anwendungen zu erstellen, bereitzustellen und auszuführen.

Erstellen eines benutzerdefinierten Docker-Images

Das Erstellen eines benutzerdefinierten Docker-Images ist der Prozess der Erstellung eines neuen Images basierend auf einem bestehenden Basis-Image und der anschließenden Hinzufügung eigener Anpassungen, wie z. B. Anwendungscode, Abhängigkeiten und Konfigurationen.

Dockerfile

Eine Dockerfile ist eine Textdatei, die alle Anweisungen zum Erstellen eines Docker-Images enthält. Sie spezifiziert das Basis-Image, die während des Build-Prozesses auszuführenden Schritte und die endgültige Konfiguration des Images.

Hier ist ein Beispiel für eine Dockerfile:

## Verwendung des offiziellen Ubuntu 22.04 Basis-Images
FROM ubuntu:22.04

## Aktualisierung des Paketindex und Installation notwendiger Pakete
RUN apt-get update && apt-get install -y \
  git \
  python3 \
  python3-pip \
  && rm -rf /var/lib/apt/lists/*

## Festlegung des Arbeitsverzeichnisses
WORKDIR /app

## Kopieren des Anwendungscodes
COPY . /app

## Installation der Python-Abhängigkeiten
RUN pip3 install --no-cache-dir -r requirements.txt

## Freigabe des Ports, auf dem die Anwendung läuft
EXPOSE 8080

## Festlegung des Befehls zum Ausführen der Anwendung
CMD ["python3", "app.py"]

Erstellen eines benutzerdefinierten Images

Um ein benutzerdefiniertes Docker-Image mithilfe der Dockerfile zu erstellen, gehen Sie folgendermaßen vor:

  1. Erstellen Sie eine Dockerfile in Ihrem Projektverzeichnis.

  2. Öffnen Sie ein Terminal und navigieren Sie zum Projektverzeichnis.

  3. Führen Sie den folgenden Befehl aus, um das Image zu erstellen:

    docker build -t my-custom-image .

    Dieser Befehl erstellt ein neues Docker-Image mit dem Namen "my-custom-image" anhand der Anweisungen in der Dockerfile.

Pushen des Images in einen Registry

Nachdem Sie Ihr benutzerdefiniertes Docker-Image erstellt haben, können Sie es in einen Docker-Registry, wie Docker Hub oder einen privaten Registry, pushen, damit es geteilt und auf anderen Systemen bereitgestellt werden kann.

  1. Melden Sie sich beim Docker-Registry an:

    docker login
  2. Markieren Sie das Image mit der URL des Registrys und Ihrem Benutzernamen:

    docker tag my-custom-image username/my-custom-image:latest
  3. Pushen Sie das Image in den Registry:

    docker push username/my-custom-image:latest

Nun ist Ihr benutzerdefiniertes Docker-Image im Registry verfügbar und kann von anderen Entwicklern gezogen und verwendet oder in Produktionsumgebungen bereitgestellt werden.

Bereitstellung und Verwaltung von Docker-Anwendungen

Sobald Sie Ihr benutzerdefiniertes Docker-Image erstellt haben, können Sie Ihre Docker-basierten Anwendungen bereitstellen und verwalten. Dieser Abschnitt behandelt die wichtigsten Konzepte und Schritte bei der Bereitstellung und Verwaltung von Docker-Anwendungen.

Bereitstellung von Docker-Containern

Um einen Docker-Container bereitzustellen, können Sie den Befehl docker run verwenden. Dieser Befehl startet einen neuen Container basierend auf einem angegebenen Image und ermöglicht Ihnen die Konfiguration verschiedener Optionen wie Portweiterleitungen, Umgebungsvariablen und Volume-Mounts.

Hier ist ein Beispiel für die Ausführung eines Containers basierend auf dem Image "my-custom-image":

docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image

Dieser Befehl:

  • Führt den Container im detachierten Modus (-d) aus.
  • Leitet den Container-Port 8080 auf den Host-Port 8080 weiter (-p 8080:8080).
  • Legt eine Umgebungsvariable DB_HOST mit dem Wert 192.168.1.100 fest (-e DB_HOST=192.168.1.100).
  • Mount das Host-Verzeichnis /data auf das Container-Verzeichnis /app/data (-v /data:/app/data).
  • Verwendet das Image "my-custom-image", um den Container zu starten.

Verwaltung von Docker-Containern

Docker bietet verschiedene Befehle zur Verwaltung laufender Container:

  • docker ps: Listet alle laufenden Container auf.
  • docker stop <container_id>: Stoppt einen laufenden Container.
  • docker start <container_id>: Startet einen gestoppten Container.
  • docker logs <container_id>: Zeigt die Logs eines Containers an.
  • docker exec -it <container_id> /bin/bash: Greift auf die Shell eines laufenden Containers zu.

Docker Compose

Docker Compose ist ein Werkzeug, mit dem Sie multi-container Docker-Anwendungen definieren und verwalten können. Es verwendet eine YAML-Datei, um die Services, Netzwerke und Volumes für Ihre Anwendung zu konfigurieren.

Hier ist ein Beispiel für eine docker-compose.yml-Datei:

version: "3"
services:
  web:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database
    depends_on:
      - database
  database:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=myapp
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Diese Compose-Datei definiert zwei Services: einen Web-Service und einen Datenbank-Service. Der Web-Service wird aus dem aktuellen Verzeichnis erstellt, während der Datenbank-Service das offizielle MySQL 5.7-Image verwendet. Die Services sind über ein Netzwerk verbunden, und die Daten des Datenbank-Services werden in einem benannten Volume persistent gespeichert.

Um diese Anwendung bereitzustellen, können Sie docker-compose up -d im selben Verzeichnis wie die docker-compose.yml-Datei ausführen.

Skalierung von Docker-Anwendungen

Docker erleichtert die Skalierung Ihrer Anwendungen durch Hinzufügen oder Entfernen von Containern. Sie können Docker Compose verwenden, um Ihre Services zu skalieren:

docker-compose up -d --scale web=3

Dieser Befehl startet drei Instanzen des "web"-Services.

Überwachung und Logging

Docker bietet integrierte Tools zur Überwachung und Protokollierung Ihrer Container. Sie können den Befehl docker stats verwenden, um die Echtzeit-Ressourcenverwendung anzuzeigen, und den Befehl docker logs, um auf die Logs eines Containers zuzugreifen.

Zusätzlich können Sie Ihre Docker-Anwendungen mit externen Überwachungs- und Logging-Tools wie Prometheus, Grafana und Elasticsearch integrieren, um erweiterte Einblicke und Funktionen zu erhalten.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie ein benutzerdefiniertes Docker-Image mithilfe einer Dockerfile erstellen, Docker-Anwendungen bereitstellen und verwalten. Sie kennen nun den Befehl zum Erstellen eines Docker-Images aus einer benutzerdefinierten Dockerfile, wodurch Sie Ihren Containerisierungsprozess optimieren und Anwendungen effektiver bereitstellen können.