Sie sollten einem Container niemals Anmeldeinformationen hinzufügen, es sei denn, Sie senden die Creds an jeden, der das Bild herunterladen kann. Insbesondere ist dies und ADD creds
später RUN rm creds
nicht sicher, da die creds-Datei im endgültigen Image in einer Zwischenschicht des Dateisystems verbleibt. Jeder, der Zugriff auf das Bild hat, kann es einfach extrahieren.
Die typische Lösung, die ich gesehen habe, wenn Sie Creds zum Auschecken von Abhängigkeiten benötigen, besteht darin, einen Container zum Erstellen eines anderen zu verwenden. Das heißt, normalerweise befindet sich in Ihrem Basiscontainer eine Build-Umgebung, die Sie aufrufen müssen, um Ihren App-Container zu erstellen. Die einfache Lösung besteht also darin, Ihre App-Quelle und dann RUN
die Build-Befehle hinzuzufügen . Dies ist unsicher, wenn Sie Creds benötigen RUN
. Stattdessen legen Sie Ihre Quelle in einem lokalen Verzeichnis ab. Führen Sie docker run
den Container (wie in ) aus, um den Erstellungsschritt auszuführen, wobei das lokale Quellverzeichnis als Volume bereitgestellt und die Creds entweder injiziert oder als anderes Volume bereitgestellt werden. Sobald der Erstellungsschritt abgeschlossen ist, erstellen Sie Ihren endgültigen Container, indem Sie einfach ADD
das lokale Quellverzeichnis aufrufen, das jetzt die erstellten Artefakte enthält.
Ich hoffe, Docker fügt einige Funktionen hinzu, um dies alles zu vereinfachen!
Update: Es sieht so aus, als ob die Methode in Zukunft verschachtelte Builds haben wird. Kurz gesagt, die Docker-Datei würde einen ersten Container beschreiben, der zum Erstellen der Laufzeitumgebung verwendet wird, und dann einen zweiten verschachtelten Container-Build, der alle Teile zum endgültigen Container zusammenfügen kann. Auf diese Weise befindet sich das Build-Time-Material nicht im zweiten Container. Dies ist eine Java-App, bei der Sie das JDK zum Erstellen der App benötigen, aber nur die JRE zum Ausführen. Es werden eine Reihe von Vorschlägen diskutiert. Beginnen Sie am besten unter https://github.com/docker/docker/issues/7115 und folgen Sie einigen Links für alternative Vorschläge.