webentwicklung-frage-antwort-db.com.de

Mehrere FROMs - was es bedeutet

Ich möchte ein Docker-Image für das Linkurious -Projekt auf github erstellen, für dessen Ausführung sowohl die Neo4j-Datenbank als auch Node.js erforderlich sind.

mein erster Ansatz war, ein Basis-Image für mein Image zu deklarieren, das Neo4j enthält. In den Referenzdokumenten wird "Basisimage" in keiner hilfreichen Weise definiert:

Basis-Image: Ein Image ohne übergeordnetes Image ist ein Basis-Image

von dem ich gelesen habe, dass ich möglicherweise nur ein Basis-Image habe, wenn dieses Image selbst kein Basis-Image hat.

aber was ist ein Basisimage? Bedeutet dies, dass, wenn ich neo4j/neo4j in einer FROM-Direktive deklariere, die neo-Datenbank automatisch ausgeführt wird und im Container auf Port 7474 verfügbar ist, wenn mein Image ausgeführt wird?

lesen der Docker-Referenz (siehe: https://docs.docker.com/reference/builder/#from ) Ich sehe:

In einer einzelnen Docker-Datei kann FROM mehrmals vorkommen, um mehrere Bilder zu erstellen. Notieren Sie sich einfach vor jedem neuen FROM-Befehl die letzte von der Festschreibung ausgegebene Bild-ID.

möchte ich mehrere Bilder erstellen? es scheint so, als ob ich ein einzelnes Bild haben möchte, das den Inhalt anderer Bilder enthält, z. neo4j und node.js

Ich habe keine Direktive gefunden, um Abhängigkeiten im Referenzhandbuch zu deklarieren. Gibt es keine Abhängigkeiten wie in RPM, bei denen der aufrufende Kontext zuerst die benötigten Images installieren muss, um mein Image auszuführen?

Ich bin verwirrt...

71
ekkis

was ist ein Basisimage?

Eine Reihe von Dateien plus EXPOSE 'd Ports, ENTRYPOINT und CMD .
Sie können Dateien hinzufügen und basierend auf diesem Basis-Image ein neues Image erstellen, wobei ein neues Dockerfile mit einer FROM-Direktive beginnt: das nach FROM angegebene Image. ist "das Basis-Image" für Ihr neues Image.

bedeutet das, dass, wenn ich neo4j/neo4j in einer FROM -Direktive deklariere, die neo-Datenbank automatisch ausgeführt wird und im Container auf Port 7474 verfügbar ist, wenn mein Image ausgeführt wird?

Nur wenn Sie CMD und ENTRYPOINT nicht überschreiben.
Aber das Bild an sich ist genug: Sie würden einen FROM neo4j/neo4j Verwenden, wenn Sie für Ihre spezielle Verwendung von neo4j Dateien hinzufügen müssten, die sich auf neo4j Beziehen.

FROM kann in einer einzelnen Docker-Datei mehrfach vorkommen

Nicht: es gibt einen Vorschlag, diese "Funktion" trotzdem zu entfernen ( Problem 13026 )

Ausgabe 14412 erwähnt:

Die Verwendung mehrerer FROM ist nicht wirklich ein Feature, sondern ein Fehler (na ja, das Limit ist eng und es gibt nur wenige Anwendungsfälle für mehrere FROM in einer Docker-Datei).


Update Mai 2017 (18 Monate später) mit docker (moby) 17.05-ce .

In einem Dockerfile können mehrere FROM can verwendet werden.
Siehe " Builder-Muster im Vergleich zu mehrstufigen Builds in Docker " (von Alex Ellis) und PR 31257 von Tõnis Tiigi.

Vor:

Das Builder-Muster umfasst die Verwendung von zwei Docker-Images: eines zum Ausführen eines Builds und eines zum Versenden der Ergebnisse des ersten Builds, ohne dass die Build-Kette und das Tooling im ersten Image beeinträchtigt werden.

Nach:

Die allgemeine Syntax beinhaltet das Hinzufügen von FROM zusätzlichen Zeiten in Ihrer Docker-Datei - die letzte FROM Anweisung ist das endgültige Basis-Image. Verwenden Sie COPY --from=<base_image_number>, Um Artefakte und Ausgaben von Zwischenbildern zu kopieren.

Erster Teil der Dockerfile:

FROM golang:1.7.3 as builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go    .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

Zweiter Teil der same (!) Dockerfile:

FROM Alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app    .
CMD ["./app"]  

Das Ergebnis wären zwei Bilder, eines zum Bauen, eines nur mit der resultierenden App (viel, viel kleiner)

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

multi               latest              bcbbf69a9b59        6 minutes ago       10.3MB  
golang              1.7.3               ef15416724f6        4 months ago        672MB  
83
VonC