Ist es möglich, aus einem Bild eine Docker-Datei zu generieren? Ich möchte aus zwei Gründen wissen:
Ich kann Bilder aus dem Repository herunterladen, möchte aber das Rezept sehen, das sie generiert hat.
Ich mag die Idee, Schnappschüsse zu speichern, aber wenn ich fertig bin, wäre es schön, ein strukturiertes Format zu haben, um zu überprüfen, was getan wurde.
image
repository
docker
user1026169
quelle
quelle
Antworten:
Aktualisieren:
Zitat aus @ aleungs Kommentar:
centurylink/dockerfile-from-image
funktioniert nicht mit Docker der neuen Version. Dieser funktioniert für mich:hub.docker.com/r/chenzj/dfimage
Sie können.
Erster Weg
Hier ist das Beispiel zum Generieren der Docker-Datei aus einem vorhandenen Image
selenium/node-firefox-debug
Zweiter Weg
Hier müssen Sie das Image nicht auf lokal ziehen und es muss kein Befehl ausgeführt werden.
Wenn Sie das obige Bild als Beispiel verwenden, können Sie Dockerfile-Befehle über die folgende URL abrufen:
https://imagelayers.io/?images=selenium%2Fnode-firefox-debug:latest
Warten Sie eine Weile, es werden zwei Fenster angezeigt, das Aufwärtsfenster listet die Ebenen auf, das Abwärtsfenster listet den Befehl in Dockerfile auf
Das URL-Format lautet:
In der Tat wird imagelayers.io von gebaut
Centurylink
quelle
Verwenden Sie den
docker history --no-trunc
Befehl , um zu verstehen, wie ein Docker-Image erstellt wurde .Sie können eine Docker-Datei aus einem Image erstellen, diese enthält jedoch nicht alles, was Sie vollständig verstehen möchten, wie das Image generiert wurde. Sie können vernünftigerweise die Teile MAINTAINER, ENV, EXPOSE, VOLUME, WORKDIR, ENTRYPOINT, CMD und ONBUILD der Docker-Datei extrahieren.
Das folgende Skript sollte für Sie funktionieren:
Ich verwende dies als Teil eines Skripts, um laufende Container als Bilder neu zu erstellen: https://github.com/docbill/docker-scripts/blob/master/docker-rebase
Die Docker-Datei ist hauptsächlich nützlich, wenn Sie ein Bild neu verpacken möchten.
Zu beachten ist, dass ein Docker-Image eigentlich nur die Teersicherung einer realen oder virtuellen Maschine sein kann. Auf diese Weise habe ich mehrere Docker-Bilder erstellt. Sogar der Build-Verlauf zeigt mir, wie ich als ersten Schritt beim Erstellen des Images eine riesige TAR-Datei importiere ...
quelle
Error response from daemon: page not found
Ich habe den eigentlichen Befehl in der akzeptierten Antwort irgendwie absolut verpasst, also ist es hier wieder etwas sichtbarer in seinem eigenen Absatz, zu sehen, wie viele Leute wie ich sind
quelle
ub.docker.com/r/chenzj/dfimage
? Es ist sogar eine neuere Antwort.docker history
die Dockerfile-Zeilen in umgekehrter Reihenfolge gedruckt werden und dieRUN
Anweisungen (Sie erhalten nur den Befehl selbst, nicht dasRUN
Keyworkd davor) und andere Dinge gelöscht werden, müssen Sie sie manuell bearbeiten, um zu einer baubaren Dockerfile zu gelangen. Das andere Tool kann diese Bearbeitung automatisch für Sie durchführen (ich habe es nicht ausprobiert, daher weiß ich es nicht.)Eine Bash-Lösung:
Schritt für Schritt Erklärungen:
Beispiel:
quelle
Dies ist derzeit nicht möglich (es sei denn, der Autor des Bildes hat die Docker-Datei ausdrücklich angegeben).
Es ist jedoch definitiv etwas Nützliches! Es gibt zwei Dinge, die helfen, diese Funktion zu erhalten.
quelle
Update Dezember 2018 auf die Antwort von BMW
quelle
Dies ergibt sich aus der Antwort von @ fallino mit einigen Anpassungen und Vereinfachungen unter Verwendung der Ausgabeformatoption für den Docker-Verlauf . Da macOS und Gnu / Linux unterschiedliche Befehlszeilenprogramme haben, ist für Mac eine andere Version erforderlich. Wenn Sie nur die eine oder andere benötigen, können Sie nur diese Zeilen verwenden.
quelle
unten ist die Ausgabe des Befehls dfimage: -
$ dfimage 0f1947a021ce
VON Knoten: 8 WORKDIR / usr / src / app
COPY-Datei: e76d2e84545dedbe901b7b7b0c8d2c9733baa07cc821054efec48f623e29218c in ./
RUN / bin / sh -c npm installieren
COPY dir: a89a4894689a38cbf3895fdc0870878272bb9e09268149a87a6974a274b2184a in.
EXPOSE 8080
CMD ["npm" "start"]
quelle