22 Dockerfile: Erstellung und Verwendung

22.1 Einführung

Ein Dockerfile ist eine Textdatei, die alle Befehle enthält, die ein Benutzer in der Befehlszeile ausführen kann, um ein Docker-Image zu erstellen. Mit einem Dockerfile können Sie wiederholbare und portierbare Images erstellen, die konsistent auf verschiedenen Systemen laufen.

22.2 Struktur eines Dockerfile

Ein Dockerfile besteht aus einer Reihe von Anweisungen. Jede Anweisung erzeugt eine neue Schicht im Image. Die häufigsten Anweisungen sind:

22.3 Beispiel für ein Dockerfile

22.3.1 Einfaches Python-Anwendungs-Dockerfile

Datei: Dockerfile

# Basis-Image
FROM python:3.9-slim

# Maintainer-Information
LABEL maintainer="your_email@example.com"

# Arbeitsverzeichnis setzen
WORKDIR /app

# Abhängigkeiten kopieren und installieren
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Anwendungsdateien kopieren
COPY . .

# Port freigeben
EXPOSE 5000

# Startbefehl festlegen
CMD ["python", "app.py"]

22.3.2 Erklärung der Anweisungen

22.4 Dockerfile-Anweisungen im Detail

22.4.1 FROM

Die FROM-Anweisung legt das Basis-Image fest, auf dem alle weiteren Schichten aufgebaut werden.

Beispiel:

FROM ubuntu:20.04

22.4.2 RUN

Die RUN-Anweisung führt Befehle im Container aus und erstellt eine neue Schicht im Image.

Beispiel:

RUN apt-get update && apt-get install -y python3 python3-pip

22.4.3 COPY und ADD

COPY und ADD kopieren Dateien und Verzeichnisse in das Image. ADD bietet zusätzliche Funktionen wie das Entpacken von Archiven.

Beispiel:

COPY . /app
ADD my_archive.tar.gz /app

22.4.4 CMD und ENTRYPOINT

CMD und ENTRYPOINT definieren den Standardbefehl, der beim Starten des Containers ausgeführt wird. CMD kann überschrieben werden, ENTRYPOINT nicht.

Beispiel:

CMD ["python", "app.py"]
ENTRYPOINT ["python", "app.py"]

22.4.5 WORKDIR

WORKDIR setzt das Arbeitsverzeichnis für alle folgenden Anweisungen.

Beispiel:

WORKDIR /app

22.4.6 ENV

ENV setzt Umgebungsvariablen, die während der Laufzeit des Containers verfügbar sind.

Beispiel:

ENV PYTHONUNBUFFERED=1

22.4.7 EXPOSE

EXPOSE gibt Ports frei, die vom Container verwendet werden.

Beispiel:

EXPOSE 5000

22.5 Erstellen und Verwenden eines Docker-Images

22.5.1 Erstellen eines Docker-Images

Befehl:

docker build -t my-python-app .

Ausgabe:

Sending build context to Docker daemon  3.072kB
Step 1/7 : FROM python:3.9-slim
 ---> 1e1dfbdd4b21
Step 2/7 : LABEL maintainer="your_email@example.com"
 ---> Using cache
 ---> 9c2874e9a01e
Step 3/7 : WORKDIR /app
 ---> Using cache
 ---> a6e1cce1f65b
Step 4/7 : COPY requirements.txt .
 ---> Using cache
 ---> b7a1e0d2c9d4
Step 5/7 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Using cache
 ---> c63a65c3b227
Step 6/7 : COPY . .
 ---> Using cache
 ---> 95f12f7e546a
Step 7/7 : CMD ["python", "app.py"]
 ---> Using cache
 ---> 5bfc17a38b93
Successfully built 5bfc17a38b93
Successfully tagged my-python-app:latest

22.5.2 Ausführen eines Docker-Containers

Befehl:

docker run -d -p 5000:5000 my-python-app

Ausgabe:

Unable to find image 'my-python-app:latest' locally
latest: Pulling from library/my-python-app
Digest: sha256:57a5274c1d6b88e4ff760a48ff0fcd67a3e78028edc8e8e3f5e3ec56f9a127c6
Status: Downloaded newer image for my-python-app:latest
a3b74fbdcb98b11f823eb6764f5bcd8e92a1d15bde5c6852e47a7bc0a27c3d49

Ein Dockerfile ermöglicht es Entwicklern, wiederholbare und portable Docker-Images zu erstellen, die in jeder Umgebung konsistent ausgeführt werden können. Durch die klare Struktur und die umfangreichen Konfigurationsmöglichkeiten können Docker-Images effizient erstellt und verwaltet werden. Im nächsten Kapitel wird die Verwaltung von Docker-Netzwerken, einschließlich Bridge-, Host- und Overlay-Netzwerken, behandelt.