Anwendungen mit Docker Engine containerisieren

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses umfassende Docker-Tutorial bietet Entwicklern und Systemadministratoren eine praktische Anleitung zum Verständnis und zur Implementierung von Containertechnologien. Durch die Erkundung der Kernkonzepte von Docker, der Installationsverfahren und grundlegender Befehle erwerben die Lernenden die Fähigkeiten, die zur Optimierung der Softwarebereitstellung und zur Erstellung konsistenter Entwicklungsumgebungen erforderlich sind.

Docker-Grundlagen

Einführung in Docker-Basics

Docker ist eine leistungsstarke Containerisierungsplattform, die die Softwarebereitstellung und -entwicklung revolutioniert. Sie ermöglicht es Entwicklern, Anwendungen mit allen Abhängigkeiten in standardisierte Einheiten, sogenannte Container, zu verpacken.

Kernkonzepte der Containerisierung

graph TD A[Docker Image] --> B[Docker Container] A --> C[Dockerfile] B --> D[Isolierte Umgebung]
Konzept Beschreibung
Container Leichte, eigenständige ausführbare Einheit
Image Schreibgeschützte Vorlage zur Erstellung von Containern
Dockerfile Textdatei mit Anweisungen zum Erstellen eines Images

Installation unter Ubuntu 22.04

## Paketindex aktualisieren
sudo apt update

## Abhängigkeiten installieren
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Offiziellen GPG-Schlüssel von Docker hinzufügen
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Stable-Repository einrichten
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker Engine installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Grundlegende Docker-Befehle

## Docker-Version anzeigen
docker --version

## Ein Image herunterladen
docker pull ubuntu:latest

## Images auflisten
docker images

## Einen Container starten
docker run -it ubuntu:latest /bin/bash

## Laufende Container auflisten
docker ps

## Einen Container stoppen
docker stop [CONTAINER_ID]

Container-Lebenszyklusverwaltung

Container bieten eine isolierte Umgebung für Anwendungen und gewährleisten eine konsistente Leistung in verschiedenen Computernumgebungen. Sie lösen das Problem "funktioniert auf meinem Rechner" durch das Verpacken von Anwendungen mit allen notwendigen Abhängigkeiten.

Docker-Images erstellen

Dockerfile verstehen

Ein Dockerfile ist eine Textdatei, die alle Befehle enthält, die zum Erstellen eines Docker-Images benötigt werden. Es bietet einen systematischen Ansatz zur Verpackung von Anwendungen und zur Containererstellung.

graph LR A[Dockerfile] --> B[Docker Build] B --> C[Docker Image] C --> D[Docker Container]

Dockerfile-Befehlssatz

Befehl Zweck
FROM Gibt das Basis-Image an
COPY Kopiert Dateien in das Image
RUN Führt Befehle während des Image-Builds aus
EXPOSE Deklariert Container-Netzwerkports
CMD Definiert den Standard-Container-Ausführungsbefehl

Erstellen eines Dockerfiles für eine Python-Webanwendung

## Verwendung des offiziellen Python-Laufzeitumgebungs-Basis-Images
FROM python:3.9-slim

## Arbeitsverzeichnis setzen
WORKDIR /app

## Anforderungen-Datei kopieren
COPY requirements.txt .

## Abhängigkeiten installieren
RUN pip install --no-cache-dir -r requirements.txt

## Anwendungscode kopieren
COPY . .

## Anwendungsport freigeben
EXPOSE 5000

## Startbefehl definieren
CMD ["python", "app.py"]

Docker-Image erstellen

## Image mit Tag erstellen
docker build -t myapp:v1 .

## Erstellte Images auflisten
docker images

## Image-Details überprüfen
docker inspect myapp:v1

Optimierungsstrategien für Images

graph TD A[Minimierung der Layerschichtanzahl] B[Verwendung von Alpine-Images] C[Ausnutzung des Build-Cache] D[Entfernen unnötiger Dateien]

Erweiterte Imageverwaltung

## Image für den Registry-Server taggen
docker tag myapp:v1 username/myapp:v1

## Image auf Docker Hub pushen
docker push username/myapp:v1

Docker im Produktionsumfeld

Container-Orchestrierungsumfeld

graph TD A[Docker Container] --> B[Kubernetes] A --> C[Docker Swarm] A --> D[Nomad]

Produktionsbereitstellungsstrategien

Strategie Beschreibung Skalierbarkeit
Einzelner Host Grundlegende Bereitstellung Gering
Swarm-Modus Native Docker-Clustering Mittel
Kubernetes Erweiterte Orchestrierung Hoch

Docker-Networking im Produktionsumfeld

## Overlay-Netzwerk erstellen
docker network create -d overlay production_network

## Dienst mit Netzwerkkonfiguration bereitstellen
docker service create \
  --name web-service \
  --network production_network \
  --replicas 3 \
  nginx:latest

Container-Monitoring-Konfiguration

version: "3"
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"

Hochverfügbarkeitskonfiguration

graph TD A[Load Balancer] --> B[Container-Instanz 1] A --> C[Container-Instanz 2] A --> D[Container-Instanz 3]

Ressourcenverwaltung

## Containerressourcen begrenzen
docker run -it \
  --cpus=".5" \
  --memory="512m" \
  nginx:latest

Sicherheitsbest Practices

## Container als Nicht-Root-Benutzer ausführen
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /run \
  --security-opt=no-new-privileges:true \
  myapp:latest

Continuous-Deployment-Pipeline

graph TD A[Code Commit] --> B[Image erstellen] B --> C[Tests ausführen] C --> D[Auf Registry pushen] D --> E[Auf Staging bereitstellen] E --> F[Produktionsbereitstellung]

Zusammenfassung

Docker revolutioniert die Softwareentwicklung, indem es eine robuste Containerisierungsplattform bietet, die die Portabilität und Konsistenz von Anwendungen sicherstellt. Durch das Verständnis der Containerlebenszyklusverwaltung, der Erstellung von Dockerfiles und der essentiellen Docker-Befehle können Fachkräfte ihren Entwicklungsablauf optimieren, die Bereitstellung komplexer Anwendungen vereinfachen und skalierbare, reproduzierbare Softwarelösungen in verschiedenen Computing-Umgebungen erstellen.