FROM ·
RUN ·
COPY ·
ADD ·
CMD ·
ENTRYPOINT ·
ENV ·
WORKDIR ·
EXPOSE ·
VOLUME
Ein Dockerfile ist das Rezept für die Erstellung von Container-Images. Diese Anweisungen sind essenziell für die Definition von Umgebungen, Abhängigkeiten und Ausführungsbefehlen.
FROM definiert das Basis-Image, auf dem das neue Image aufbaut. Jedes Dockerfile muss mit FROM beginnen. Es kann mehrfach verwendet werden (Multi-Stage-Builds).
RUN führt Befehle während des Image-Builds aus. Jede RUN-Anweisung erzeugt eine neue Layer im Image. Für effiziente Builds sollten mehrere Befehle in einer Anweisung kombiniert werden.
RUN-Befehle mit && und löschen Sie temporäre Dateien, um die Image-Größe zu reduzieren (z.B. rm -rf /var/lib/apt/lists/*).
COPY kopiert Dateien und Verzeichnisse vom Build-Kontext in das Image. Es ist die bevorzugte Methode zum Einfügen von Quelldateien.
COPY ist ADD vorzuziehen, weil es transparenter ist. Verwenden Sie .dockerignore, um große oder unnötige Dateien auszuschließen.
ADD ist eine erweiterte Version von COPY mit zusätzlichen Funktionen: Unterstützung für URLs, automatisches Entpacken von Tar-Archiven und mehr. Achtung: Verwenden Sie COPY wenn möglich.
ADD wird oft als "böse" Anweisung betrachtet, weil es das automatische Entpacken und URL-Laden unterstützt – was zu unerwartetem Verhalten führen kann. Verwenden Sie bevorzugt COPY für lokale Dateien.
CMD definiert den Standardbefehl beim Container-Start (kann überschrieben werden). ENTRYPOINT definiert den festen Hauptbefehl, der nicht überschrieben werden kann (nur Parameter).
| Merkmal | CMD | ENTRYPOINT |
|---|---|---|
| Überschreibbar | Ja (docker run ...) | Nein (nur mit --entrypoint) |
| Verwendung | Standardbefehle, Parameter | Hauptprogramm, feste Ausführung |
| Kombination | Wird als Parameter an ENTRYPOINT übergeben | Fester Befehl, CMD als Parameter |
ENTRYPOINT für den festen Befehl und CMD für Standardparameter – das ist das empfohlene Muster für flexible Container.
ENV setzt Umgebungsvariablen, die zur Laufzeit verfügbar sind. ARG definiert Build-Argumente, die beim docker build --build-arg überschrieben werden können.
ENV-Variablen bleiben im Image erhalten und können zur Laufzeit mit docker run -e überschrieben werden. ARG ist nur während des Builds verfügbar.
WORKDIR setzt das Arbeitsverzeichnis für alle nachfolgenden RUN, CMD, ENTRYPOINT, COPY und ADD-Anweisungen. Wenn das Verzeichnis nicht existiert, wird es erstellt.
WORKDIR, um Missverständnisse zu vermeiden. Setzen Sie WORKDIR am Anfang des Dockerfiles, bevor Sie Dateien kopieren.
EXPOSE dokumentiert, welche Ports der Container zur Verfügung stellt (wird nicht automatisch veröffentlicht). VOLUME definiert einen Daten-Pfad, der persistiert werden soll.
EXPOSE ist nur dokumentierend – Sie müssen Ports beim Start mit -p oder -P tatsächlich veröffentlichen. VOLUME erstellt einen anonymen Docker-Volume-Mount.
USER wechselt den Benutzer für nachfolgende Anweisungen. SHELL ändert die Standard-Shell. HEALTHCHECK definiert einen Gesundheitscheck für den Container. LABEL fügt Metadaten hinzu.
USER, um als nicht-root Benutzer zu laufen – das erhöht die Sicherheit. HEALTHCHECK wird von Docker und Orchestrierungstools wie Kubernetes unterstützt.
FROM
RUN
COPY
CMD
ENTRYPOINT
ENV
WORKDIR
FROM node:18-alpine ·
WORKDIR /app ·
COPY package.json . ·
RUN npm install ·
CMD ["node", "app.js"]