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.
Ein Dockerfile besteht aus einer Reihe von Anweisungen. Jede Anweisung erzeugt eine neue Schicht im Image. Die häufigsten Anweisungen sind:
FROM
: Basis-ImageRUN
: Ausführen von Befehlen im ContainerCOPY
und ADD
: Dateien in das Image
kopierenCMD
und ENTRYPOINT
: Ausführbare Befehle
oder SkripteWORKDIR
: Arbeitsverzeichnis festlegenENV
: Umgebungsvariablen setzenEXPOSE
: Ports freigebenDatei: 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"]
FROM
: Basis-Image python:3.9-slim
verwenden.LABEL
: Metadaten zum Image hinzufügen.WORKDIR
: Arbeitsverzeichnis auf /app
setzen.COPY
und RUN
: Abhängigkeiten aus
requirements.txt
installieren.COPY
: Anwendungsdateien ins Image kopieren.EXPOSE
: Port 5000 für den Container freigeben.CMD
: Standardbefehl zum Starten der Anwendung.Die FROM
-Anweisung legt das Basis-Image fest, auf dem
alle weiteren Schichten aufgebaut werden.
Beispiel:
FROM ubuntu:20.04
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
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
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"]
WORKDIR
setzt das Arbeitsverzeichnis für alle folgenden
Anweisungen.
Beispiel:
WORKDIR /app
ENV
setzt Umgebungsvariablen, die während der Laufzeit
des Containers verfügbar sind.
Beispiel:
ENV PYTHONUNBUFFERED=1
EXPOSE
gibt Ports frei, die vom Container verwendet
werden.
Beispiel:
EXPOSE 5000
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
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.