Ich hatte den Eindruck, dass Umgebungsvariablen wie folgt in einer einzelnen Zeile festgelegt werden können, um Zwischenbilder zu minimieren.
FROM alpine:3.6
ENV RUBY_MAJOR 2.4 \
RUBY_VERSION 2.4.1 \
RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
RUBYGEMS_VERSION 2.6.12 \
BUNDLER_VERSION 1.15.3
Wenn # set |grep RU
ich jedoch einen Container basierend auf diesem Snippet ausführe und aufrufe, sehe ich, dass die Variablen nicht separat zugewiesen werden, sondern zu einer einzigen Zeichenfolge zusammengefasst werden.
RUBY_MAJOR='2.4 RUBY_VERSION 2.4.1 RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 RUBYGEMS_VERSION 2.6.12 BUNDLER_VERSION 1.15.3'
Wenn ich jedoch jede Variable explizit wie folgt einstelle, erhalte ich die erwartete Ausgabe und es gibt keine Fehler beim Aufrufen der Variablen.
ENV RUBY_MAJOR 2.4
ENV RUBY_VERSION 2.4.1
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
ENV RUBYGEMS_VERSION 2.6.12
ENV BUNDLER_VERSION 1.15.3
Frage: Ist es möglich, die Einstellung von Umgebungsvariablen in einer einzigen Zeile zu kombinieren? Wenn ja, wie würde ich das machen? Und ist es eine gute Praxis?
quelle
ENV PATH="$PATH:/app" \ APPVAR="foo"
ENV
Befehl deklariert wurde , erst nach Abschluss des Befehls festgelegt, sodass das Verhalten wie erwartet ist (versuchen Sie esecho $V_NOT_SET
mit einem * nix-basierten System). Geben Sie Build-Argumente ein. Als Randnotizexport V_NOT_SET="hello" echo $V_NOT_SET
wird auch nur Leerzeichen ergeben; Hinzufügen einesexport
Vorher hilft nicht; Das Einfügen&&
(akaAND_IF
) zwischenexport
undecho
wird zuhello
einem Echo führen, da jetzt der erste Befehl abgeschlossen sein muss, bevor der zweite ausgewertet wird.Sie müssen sich nicht um viele
ENV
Befehle kümmern , die jeweils eine neue Zwischenebene für Ihr endgültiges Image erstellen, das von Ihrer Docker-Datei erstellt wurde.aus Best Practices zum Schreiben von Dockerfiles
quelle
ENV
Zeilen werden keine Ebenen im Bild erstellt. Wenn Sie das Bild erstellen, in dem "Zwischencontainer entfernen" steht, und anschließend die Ebenen mit einem Tauchgang untersuchen, kann ich feststellen, dass keine Ebenen für erstellt wurdenENV
.