Dockerfile ist die deklarative Bauanleitung für Docker-Images. Jede Zeile ist eine Instruktion, die eine eigene Bildschicht (Layer) erzeugt. Wer Container produktiv einsetzt, sollte die zentralen Befehle sicher beherrschen.

Die wichtigsten Instruktionen

  • FROM <image> – legt das Basis-Image fest und startet jeden Build. Erstes Kommando eines jeden Dockerfiles.
  • RUN <befehl> – führt Shell-Befehle aus (z. B. Pakete installieren) und legt die Änderungen als neue Schicht ab.
  • CMD – definiert den Standard-Befehl beim Container-Start; kann durch docker run ... <befehl> ersetzt werden. Nur eine CMD-Zeile zählt.
  • ENTRYPOINT – setzt den festen Einstiegspunkt; Argumente des Starts werden an ihn angehängt. Kombination ENTRYPOINT + CMD ist der klassische Weg zu ausführbaren Containern.
  • COPY – kopiert Dateien vom Build-Kontext ins Image; ADD kann zusätzlich URLs und Archive auflösen.
  • ENV – setzt Umgebungsvariablen für den Build und zur Laufzeit; ARG nur für Build-Argumente (docker build --build-arg).
  • WORKDIR – wechselt das Arbeitsverzeichnis für alle folgenden Befehle (entspricht cd, aber schicht-korrekt).
  • EXPOSE – dokumentiert Container-Ports; USER wechselt den Benutzer (Sicherheit: nicht als root laufen lassen).
  • VOLUME – deklariert persistente Datenverzeichnisse; HEALTHCHECK prüft die Container-Gesundheit (z. B. HEALTHCHECK CMD curl -f http://localhost/).

Multi-Stage-Builds und Best Practices

Mit FROM ... AS <name> lassen sich mehrere Build-Stufen definieren: In der ersten Stufe wird kompiliert, in der letzten nur das fertige Artefakt in ein schlankes Laufzeit-Image kopiert (COPY --from=build /app/out /app). So bleiben Images klein und ohne unnötige Werkzeuge.

Weitere Empfehlungen: Häufig wechselnden Code ans Ende der Datei legen (Layer-Caching), eine .dockerignore für unnötige Dateien anlegen und die offizielle # syntax=docker/dockerfile:1-Direktive für BuildKit nutzen.

Verwandte Themen: Bash-Befehle (RUN-Shell), Make-Befehle (Build-Steuerung), Jenkinsfile-Befehle und GitHub-Actions-Befehle (CI/CD-Pipelines bauen Container).