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 durchdocker run ... <befehl>ersetzt werden. Nur eine CMD-Zeile zählt.ENTRYPOINT– setzt den festen Einstiegspunkt; Argumente des Starts werden an ihn angehängt. KombinationENTRYPOINT+CMDist der klassische Weg zu ausführbaren Containern.COPY– kopiert Dateien vom Build-Kontext ins Image;ADDkann zusätzlich URLs und Archive auflösen.ENV– setzt Umgebungsvariablen für den Build und zur Laufzeit;ARGnur für Build-Argumente (docker build --build-arg).WORKDIR– wechselt das Arbeitsverzeichnis für alle folgenden Befehle (entsprichtcd, aber schicht-korrekt).EXPOSE– dokumentiert Container-Ports;USERwechselt den Benutzer (Sicherheit: nicht als root laufen lassen).VOLUME– deklariert persistente Datenverzeichnisse;HEALTHCHECKprü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).