2017-05-02 5 views
2

Ich habe ein Basis-Docker-Image (openjdk) verwendet, um ein Image mit einem einfachen Java-Programm zu erstellen.So verwenden Sie mehrere Basisbilder zum Erstellen eines Docker-Images

Aber ich frage mich, ob ich 2 Basisbilder in einer Docker-Datei verwenden. Wie können wir das machen? ich Docker glaube nicht, dass so etwas unterstützt:

FROM dockerImaage1 
FROM dockerImage2 

Eines der Szenarien, warum dies erforderlich ist, ich ein Bild von ubuntu mit openjdk will, so eine Art, wie ich das Basis-Image von Ubuntu verwenden und die in Docker-Datei schreiben Anweisung zur Installation von openjdk, setzen JAVA_HOME Variable usw., die zweifellos umständlich ist.

Eine weitere Alternative, die ich mag, verwendet das Basisbild von openjdk innerhalb der Basis von Ubuntu (wenn möglich).

Es kann mehr typische Fälle geben, in denen wir brauchen, ist Feature verdammt schlecht.

SO Ideen für die Verwendung von 2 Basisbildern in einer Docker-Datei? Hat das schon jemand gemacht?

Ich habe einen Link von Reverse Engineering here gefunden, aber es hat einige Einschränkungen wie wenn die Docker-Datei von Ubuntu Befehle wie ADD oder COPY verwendet, schlägt das Reverse Engineering fehl.

+2

Viele Bilder da draußen haben ihre Dockerfile veröffentlicht. Es gibt selten die Notwendigkeit, Reverse Engineering. – Henry

+0

Mögliches Duplikat von [Gibt es eine Möglichkeit, Docker-Bilder in einem Container zu kombinieren?] (Http://stackoverflow.com/questions/39626579/is-there-a-way-to-combine-docker-images-into-1 (container) –

Antwort

2

Leicht? Nein. Docker unterstützt dies nicht, da es mehrere Linux-Root-Dateisysteme effektiv kombiniert.

Der einfachste Weg dies zu tun wäre, von Ubuntu zu starten und dann openjdk zu installieren, oder ein Bild auf dem Docker-Hub zu finden, das dies bereits tut.

+0

Also im Grunde ist die Antwort NEIN. Es gibt keinen Weg, 2 Docker-Dateien zu kombinieren. –

2

Die Antwort ist NEIN. Siehe die Detaildiskussionen in der Moby-Ausgabe, How do I combine several images into one via Dockerfile.

Die Idee hinter Containern ist, dass die kleinste Einheit der realen Zusammensetzung der Container ist. Im Allgemeinen könnte das Zusammenführen mehrerer Bilder zu einem Bild einige Probleme verursachen. Zum Beispiel haben verschiedene Bilder einen Konflikt bei der Bibliothek oder der Bibliotheksversion.

1

Die neueste Version von Docker hat das Konzept der mehrstufigen Builds. Siehe: (https://docs.docker.com/engine/userguide/eng-image/multistage-build/)

Mit mehrstufigen Builds verwenden Sie mehrere FROM-Anweisungen in Ihrer Dockerfile. Jeder FROM-Befehl kann eine andere Basis verwenden, und jeder von ihnen beginnt eine neue Phase des Builds. Sie können Artefakte selektiv von einer Bühne in eine andere kopieren und alles, was Sie nicht möchten, im endgültigen Bild hinterlassen.

+1

Dies ist eine Borderline [Nur-Link-Antwort] (// meta.stackexchange.com/q/8231). Sie sollten Ihre Antwort so erweitern, dass sie so viele Informationen enthält, und den Link nur als Referenz verwenden. –

Verwandte Themen