Docker-Image-Erstellung
Docker-Images verstehen
Docker-Images sind schreibgeschützte Vorlagen, die als Grundlage für die Erstellung von Containern dienen. Sie enthalten alles, was zum Ausführen einer Anwendung benötigt wird, einschließlich Code, Laufzeitumgebung, Bibliotheken und Systemtools.
Dockerfile-Grundlagen
Ein Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Jede Anweisung erstellt eine neue Schicht im Image.
graph TD
A[Dockerfile] --> B[Basis-Image]
A --> C[Anwendung Dateien kopieren]
A --> D[Abhängigkeiten installieren]
A --> E[Umgebung konfigurieren]
A --> F[Startbefehl definieren]
Beispiel-Dockerfile für eine Python-Anwendung
## Verwendung des offiziellen Python-Laufzeitumgebungs-Basis-Images
FROM python:3.9-slim
## Arbeitsverzeichnis im Container setzen
WORKDIR /app
## requirements.txt-Datei kopieren
COPY requirements.txt .
## Notwendige Pakete installieren
RUN pip install --no-cache-dir -r requirements.txt
## Anwendungscode kopieren
COPY . .
## Portnummer spezifizieren
EXPOSE 5000
## Befehl zum Ausführen der Anwendung definieren
CMD ["python", "app.py"]
Image-Erstellungsstrategien
Strategie |
Beschreibung |
Anwendungsfall |
Einstufiger Build |
Einfache, direkte Builds |
Kleine, unkomplizierte Anwendungen |
Mehrstufiger Build |
Optimierung von Imagegröße und Sicherheit |
Komplexe Anwendungen mit Build-Abhängigkeiten |
Beispiel für einen mehrstufigen Build
## Stufe 1: Build-Stufe
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
## Stufe 2: Laufzeit-Stufe
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/myapp.jar .
EXPOSE 8080
CMD ["java", "-jar", "myapp.jar"]
Docker-Images erstellen und verwalten
## Image erstellen
docker build -t myapp:v1 .
## Lokale Images auflisten
docker images
## Image entfernen
docker rmi myapp:v1
## Image taggen
docker tag myapp:v1 myregistry/myapp:latest
Optimierungsmethoden für Images
- Verwendung minimaler Basis-Images
- Minimierung der Schichtanzahl
- Nutzung des Build-Cache
- Entfernen unnötiger Dateien
- Verwendung der .dockerignore-Datei
Docker-Image-Schichten
graph TD
A[Basis-Image-Schicht] --> B[Abhängigkeits-Installationsschicht]
B --> C[Anwendungsschicht]
C --> D[Konfigurationsschicht]
D --> E[Eingangs-Schicht]