Grundlagen von Docker-Images verstehen

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses umfassende Tutorial erforscht die grundlegenden Konzepte von Docker-Images und bietet Entwicklern und DevOps-Experten detaillierte Einblicke in die Erstellung, Strukturierung und Verwaltung von Container-Images. Durch das Verständnis der Kernprinzipien der Docker-Image-Architektur erhalten die Leser praktische Kenntnisse für die Erstellung effizienter und reproduzierbarer Software-Bereitstellungslösungen.

Grundlagen von Docker-Images

Was sind Docker-Images?

Docker-Images sind leichte, eigenständige, ausführbare Pakete, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird: Code, Laufzeitumgebung, Systemtools, Bibliotheken und Einstellungen. Sie dienen als grundlegende Bausteine der Containertechnologie und ermöglichen eine konsistente und portierbare Softwarebereitstellung über verschiedene Computing-Umgebungen hinweg.

Hauptkomponenten von Docker-Images

graph TD A[Docker-Image] --> B[Basis-Layer] A --> C[Anwendungsschicht] A --> D[Konfigurationsschicht] B --> E[Betriebssystem] B --> F[Systembibliotheken] C --> G[Anwendungskode] C --> H[Abhängigkeiten] D --> I[Umgebungsvariablen] D --> J[Startbefehle]

Aufbau und Schichten von Images

Schichttyp Beschreibung Beispiel
Basis-Layer Grundlegendes Betriebssystem Ubuntu 22.04
Zwischen-Schichten System-Abhängigkeiten Python-Laufzeit
Anwendungsschicht Quellcode und Anwendungsdateien Webanwendung
Konfigurationsschicht Laufzeiteinstellungen Port-Zuordnungen

Erstellen eines Docker-Images: Praktisches Beispiel

## Erstellen eines Projektverzeichnisses
mkdir my-docker-app
cd my-docker-app

## Erstellen einer einfachen Python-Anwendung
echo "print('Hallo, Docker!')" > app.py

## Erstellen der Dockerfile
cat > Dockerfile << EOL
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3
COPY app.py /app/app.py
WORKDIR /app
CMD ["python3", "app.py"]
EOL

## Erstellen des Docker-Images
docker build -t my-python-app .

## Ausführen des Containers
docker run my-python-app

Dieses Beispiel zeigt die Erstellung eines Docker-Images mit einer minimalen Ubuntu-Basis, der Installation von Python und der Ausführung eines einfachen Python-Skripts. Die Dockerfile definiert jede Schicht des Images und gewährleistet Reproduzierbarkeit und Konsistenz in verschiedenen Umgebungen.

Eigenschaften von Images

Docker-Images sind unveränderlich, d.h. sie bleiben nach ihrer Erstellung unverändert. Jedes Image besteht aus mehreren schreibgeschützten Schichten, die in verschiedenen Images geteilt werden können, was die Effizienz von Speicherplatz und Downloadzeiten fördert.

Docker-Image-Verwaltung

Grundlegende Befehle zur Imageverwaltung

Docker bietet eine umfassende Befehlssammlung zur effizienten Verwaltung von Images auf Ubuntu 22.04-Systemen. Das Verständnis dieser Befehle ist entscheidend für die Aufrechterhaltung einer sauberen und optimierten Containerumgebung.

graph LR A[Docker-Image-Verwaltung] --> B[Images auflisten] A --> C[Images löschen] A --> D[Images herunterladen] A --> E[Images umbenennen]

Auflistung und Inspektion von Images

## Alle lokalen Images auflisten
docker images

## Detaillierte Image-Inspektion
docker inspect ubuntu:latest

## Images nach bestimmten Kriterien filtern
docker images --filter "dangling=true"

Imageverwaltungsoperationen

Operation Befehl Beschreibung
Image herunterladen docker pull Image aus dem Repository herunterladen
Image löschen docker rmi Lokales Image löschen
Nicht verwendete Images entfernen docker image prune Nicht verwendete Images bereinigen
Image umbenennen docker tag Image-Alias erstellen

Erweiterte Techniken zur Imagebereinigung

## Alle nicht verwendeten Images entfernen
docker image prune -a

## Spezifisches Image entfernen
docker rmi image_name:tag

## Images ohne laufende Container entfernen
docker image prune -f

Strategien zur Optimierung der Imagegröße

## Imagegröße prüfen
docker images --format "{{.Repository}}:{{.Tag}}: {{.Size}}"

## Minimale Images mithilfe von Multi-Stage-Builds erstellen
FROM ubuntu:22.04 AS builder
## Abhängigkeiten erstellen

FROM ubuntu:22.04
## Nur notwendige Artefakte kopieren

Image-Versionsverwaltung

## Spezifische Imageversion umbenennen
docker tag original_image:latest new_image:v1.0

## Umbenanntes Image in das Repository pushen
docker push new_image:v1.0

Best Practices für Image-Repositorys

Architektur von Docker-Repositorys

graph TD A[Docker-Repository] --> B[Öffentliche Repositorys] A --> C[Private Repositorys] B --> D[Docker Hub] C --> E[Eigenständig gehosteter Registry] C --> F[Cloud-Provider-Registrys]

Repository-Typen und Eigenschaften

Repository-Typ Zugriffsebene Anwendungsfall
Docker Hub Öffentlich/Privat Community-Images, offizielle Repositorys
Privater Registry Eingeschränkt Unternehmens-Umgebungen, sensible Projekte
Cloud-Registrys Managen Skalierbare, integrierte Cloud-Bereitstellungen

Authentifizierung und Sicherheitsrichtlinien

## Anmeldung am Docker Hub
docker login

## Erstellung der Authentifizierung für privaten Registry
docker login private-registry.example.com

## Generierung von Registry-Anmeldeinformationen
htpasswd -Bc registry.password username

Optimierung des Image-Speichers

## Begrenzung des lokalen Imagespeichers
docker system prune -a --volumes

## Entfernen von "dangling" Images
docker image prune

## Festlegung der Speichergrenze
docker system df

Automatisierte Imageverwaltung

#!/bin/bash
## Skript zur Bereinigung von Docker-Images

## Entfernen von Images älter als 30 Tage
docker image prune -a --filter "until=720h"

## Entfernen von nicht verwendeten Volumes
docker volume prune -f

## Entfernen von nicht verwendeten Netzwerken
docker network prune -f

Repository-Synchronisation

## Herunterladen der neuesten Images
docker pull ubuntu:latest
docker pull nginx:stable

## Umbenennen und Pushen in den privaten Registry
docker tag ubuntu:latest private-registry.com/ubuntu:latest
docker push private-registry.com/ubuntu:latest

Integration von Sicherheits-Scans

## Scannen des Images auf Sicherheitslücken
docker scan ubuntu:latest

## Integration in die CI/CD-Pipeline
trivy image ubuntu:latest

Zusammenfassung

Docker-Images stellen einen entscheidenden Bestandteil moderner Containerisierungstechnologie dar und ermöglichen eine konsistente und portierbare Softwarebereitstellung über verschiedene Computing-Umgebungen hinweg. Durch die Beherrschung der Imageerstellung, der Layer-Verwaltung und der Repository-Praktiken können Entwickler die Anwendungspackung optimieren, die Bereitstellungseffizienz verbessern und eine zuverlässige Softwareverteilung über verschiedene Plattformen und Infrastrukturen gewährleisten.