Docker Container-Bereitstellung auf Ubuntu

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 grundlegende Anleitung zum Verständnis und zur Implementierung von Containertechnologien. Durch die Erkundung der Kernkonzepte, der Architektur und der praktischen Implementierung von Docker erwerben die Lernenden kritische Fähigkeiten in der modernen Softwarebereitstellung und Infrastrukturverwaltung.

Docker-Grundlagen

Was ist Docker?

Docker ist eine leistungsstarke Containerisierungstechnologie, die es Entwicklern ermöglicht, Anwendungen konsistent in verschiedenen Computing-Umgebungen zu verpacken, zu verteilen und auszuführen. Als grundlegendes Werkzeug in der modernen Softwareentwicklung vereinfacht Docker die Anwendungsbereitstellung und erhöht die Systemeffizienz.

Kernkonzepte der Containerisierung

Die Containerisierung ermöglicht es Anwendungen, isoliert und unabhängig mit eigenen Abhängigkeiten zu laufen. Im Gegensatz zu traditionellen virtuellen Maschinen teilen Container den Kernel des Hostsystems, was sie leicht und schnell macht.

graph TD A[Anwendungscode] --> B[Docker-Container] B --> C[Gemeinsamer Host-Kernel] B --> D[Isolierte Umgebung]

Docker-Architektur

Komponente Beschreibung
Docker-Daemon Hintergrunddienst zur Verwaltung von Containern
Docker-Client Befehlszeilenschnittstelle zur Interaktion mit Docker
Docker-Images Schreibgeschützte Vorlagen zur Erstellung von Containern
Docker-Container Laufende Instanzen von Docker-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 Docker GPG-Schlüssel hinzufügen
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Stable-Repository einrichten
echo "deb [arch=$(dpkg --print-architecture) 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

Erstes Docker-Container-Beispiel

## Offizielle Ubuntu-Image herunterladen
docker pull ubuntu:latest

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

## Im Container die Umgebung verifizieren
cat /etc/os-release

Dieses Beispiel zeigt, wie man ein Ubuntu-Image herunterlädt und einen interaktiven Container startet, was die Einfachheit von Docker bei der Erstellung isolierter Umgebungen demonstriert.

Container-Verwaltung

Container-Lebenszyklus-Operationen

Docker bietet umfassende Befehle zur Verwaltung des Container-Lebenszyklus, die Entwicklern ermöglichen, Container effizient zu erstellen, zu starten, zu stoppen und zu entfernen.

graph LR A[Container erstellen] --> B[Container starten] B --> C[Laufender Container] C --> D[Container stoppen] D --> E[Container entfernen]

Wesentliche Docker-Container-Befehle

Befehl Funktion Beispiel
docker create Neuen Container erstellen docker create ubuntu:latest
docker start Gestoppten Container starten docker start container_id
docker stop Laufenden Container stoppen docker stop container_id
docker rm Container entfernen docker rm container_id
docker ps Laufende Container auflisten docker ps
docker ps -a Alle Container auflisten docker ps -a

Beispiel zur Containerverwaltung

## Neuen Container erstellen
docker create --name web_server nginx:latest

## Container starten
docker start web_server

## Laufende Container auflisten
docker ps

## Container stoppen
docker stop web_server

## Container entfernen
docker rm web_server

Container-Ressourcenverwaltung

## Container mit Ressourcenlimits ausführen
docker run -d \
  --name limited_container \
  --memory=512m \
  --cpus=1.5 \
  nginx:latest

Dieses Beispiel zeigt die Einstellung von Speicher- und CPU-Beschränkungen für einen Container, um eine kontrollierte Ressourcenauslastung sicherzustellen.

Erweiterte Containerinspektion

## Detaillierte Containerinformationen
docker inspect web_server

## Container-Logs
docker logs web_server

## Echtzeit-Containerstatistiken
docker stats web_server

Erweiterte Container-Techniken

Container-Netzwerk-Konfiguration

Docker bietet flexible Netzwerkoptionen für komplexe Anwendungsarchitekturen.

graph LR A[Host-Netzwerk] --> B[Bridge-Netzwerk] B --> C[Benutzerdefiniertes Netzwerk] C --> D[Overlay-Netzwerk]

Netzwerktypen

Netzwerktyp Beschreibung Anwendungsfall
Bridge Standardnetzwerk Isolierte Containerkommunikation
Host Direktes Host-Netzwerk Hochleistungs-Szenarien
Overlay Multi-Host-Netzwerk Verteilte Systeme

Erstellung eines benutzerdefinierten Netzwerks

## Benutzerdefiniertes Netzwerk erstellen
docker network create --driver bridge my_custom_network

## Container im benutzerdefinierten Netzwerk ausführen
docker run -d \
  --name web_app \
  --network my_custom_network \
  nginx:latest

Volume-Verwaltung

## Dauerhaftes Volume erstellen
docker volume create app_data

## Volume an Container mounten
docker run -d \
  --name database \
  -v app_data:/var/lib/database \
  postgres:latest

Container-Orchestrierung mit Docker Compose

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  database:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: secret

Leistungsüberwachung

## Echtzeit-Containermetriken
docker stats

## Container-Ressourcenverbrauch
docker top container_name

## Leistungsprofilerstellung
docker run \
  --rm \
  -it \
  --privileged \
  ubuntu:latest \
  perf top

Zusammenfassung

Docker stellt einen revolutionären Ansatz zur Verpackung und Bereitstellung von Anwendungen dar und bietet leichte, portable und effiziente Containerisierungslösungen. Durch die Beherrschung der grundlegenden Docker-Techniken können Entwickler ihren Workflow optimieren, konsistente Umgebungen gewährleisten und die Skalierbarkeit des Systems auf verschiedenen Computing-Plattformen verbessern.