dockerfmt – Formatter für Dockerfiles
(github.com/reteps)- Ein modernisierter Ersatz für das bisherige
dockfmt, der Dockerfiles automatisch bereinigt und den Code-Stil vereinheitlicht - Verwendet intern
buildkitzur Analyse der Dockerfile-Syntax undmvdan/shzum Formatieren von Shell-Skripten innerhalb vonRUN-Befehlen - Hilft dabei, einen konsistenten Code-Stil beizubehalten, und kann in Code-Reviews sowie CI-Umgebungen nützlich eingesetzt werden
Verwendung
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- Wichtige Befehle:
- completion: Generiert Shell-Autovervollständigungs-Skripte
- help: Hilfe zu Befehlen
- version: Gibt die Version aus
- Wichtige Flags:
- -c, --check: Prüft nur, ob Formatierung erforderlich ist
- -i, --indent: Legt die Anzahl der Einrückungs-Leerzeichen fest (Standardwert 4)
- -n, --newline: Fügt am Dateiende einen Zeilenumbruch hinzu
- -s, --space-redirects: Fügt nach Umleitungsoperatoren Leerzeichen ein
- -w, --write: Überschreibt die Originaldatei mit den geänderten Inhalten
Pre-commit-Hook-Konfiguration
- Kann als pre-commit-Hook integriert werden
- Beispiel für die Datei
.pre-commit-config.yaml:repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
Aktuelle Einschränkungen
- Semikolons (
;) oder Befehlsgruppierungen inRUN-Befehlen werden derzeit noch nicht unterstützt - Keine automatische Zeilenumbruch-Funktion für lange JSON-Befehle
- Die Direktive
# escape=Xwird nicht unterstützt
Funktionsübersicht
-
Nutzt
mvdan/shbeim Formatieren vonRUN-Befehlen -
Grundlegende heredoc-Unterstützung:
RUN <<EOF echo "hello" echo "world" EOF -
Unterstützung für Kommentare innerhalb von
RUN-Befehlen:RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
Es wird versucht sicherzustellen, dass Kommentare an der korrekt formatierten Position angehängt werden, was jedoch schwierig ist, da Kommentare im Parser-Schritt entfernt werden
JS-Bindings
- Die JS-Bindings sind im Verzeichnis
jsenthalten - Die Verwendung ist in
js/README.mdbeschrieben
Sonstige Hinweise
- Da es sich noch um eine Version vor 1.0.0 handelt, wird der Einsatz in Produktionsumgebungen derzeit nicht empfohlen
1 Kommentare
Hacker-News-Kommentare
RUN-Parser keine Gruppierung oder Semikolons in Befehlen unterstütztRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUN-Parser unterstütze keine Gruppierung oder Semikolons in Befehlen, aber im Beispiel wird gezeigt, dass&&unterstützt wird. Ich frage mich, warum es da einen Unterschied gibtRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMimmer ein, um die Stages klarer zu machen. Für mich wäre es so, als würde man in anderen Sprachen Funktionskörper nicht einrücken