Docker-Images erstellen
Docker-Images verstehen
Docker-Images sind schreibgeschützte Vorlagen, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird: Code, Laufzeitumgebung, Bibliotheken, Umgebungsvariablen und Konfigurationsdateien. Sie dienen als Blaupausen für die Erstellung von Containern.
graph LR
A[Dockerfile] --> B[Docker-Image]
B --> C[Docker-Container]
Dockerfile-Grundlagen
Ein Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Jede Anweisung erstellt eine neue Schicht im Image.
Dockerfile-Anweisungstypen
Anweisung |
Zweck |
Beispiel |
FROM |
Basis-Image festlegen |
FROM ubuntu:22.04 |
RUN |
Befehle ausführen |
RUN apt-get update |
COPY |
Dateien kopieren |
COPY app.py /app/ |
WORKDIR |
Arbeitsverzeichnis festlegen |
WORKDIR /app |
CMD |
Standardbefehl |
CMD ["python", "app.py"] |
Erstellen eines Beispiel-Python-Anwendungsimage
Projektstruktur
/project
├── Dockerfile
└── app.py
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile
## Verwendung des offiziellen Python-Laufzeitumgebungs-Basis-Images
FROM python:3.9-slim
## Arbeitsverzeichnis festlegen
WORKDIR /app
## Projektdateien kopieren
COPY app.py requirements.txt ./
## Abhängigkeiten installieren
RUN pip install --no-cache-dir -r requirements.txt
## Port freigeben
EXPOSE 5000
## Standardbefehl definieren
CMD ["python", "app.py"]
Docker-Images erstellen und verwalten
## requirements.txt erstellen
echo "flask" > requirements.txt
## Docker-Image erstellen
docker build -t my-flask-app .
## Images auflisten
docker images
## Container aus dem Image starten
docker run -p 5000:5000 my-flask-app
Optimierungsstrategien für Images
- Verwendung von mehrstufigen Builds
- Minimierung der Schichtanzahl
- Nutzung des Build-Cache
- Verwendung spezifischer Image-Tags
- Entfernen unnötiger Dateien