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.