Je souhaite créer une image de menu fixe pour le projet Linkurious sur github, qui requiert à la fois la base de données Neo4j et Node.js.
ma première approche a été de déclarer une image de base pour mon image, contenant Neo4j. Les documents de référence ne définissent pas "l'image de base" de manière utile:
Image de base: une image sans parent est une image de base.
à partir duquel j'ai lu que je ne peux avoir une image de base que si cette image n'a pas d'image de base elle-même.
mais qu'est-ce qu'une image de base? Cela signifie-t-il que si je déclare neo4j/neo4j dans une directive FROM, lorsque mon image est exécutée, la base de données neo s'exécutera automatiquement et sera disponible dans le conteneur sur le port 7474?
lecture de la référence Docker (voir: https://docs.docker.com/reference/builder/#from ) Je vois:
FROM peut apparaître plusieurs fois dans un même fichier Dockerfile afin de créer plusieurs images. Notez simplement le dernier identifiant d'image généré par la validation avant chaque nouvelle commande FROM.
est-ce que je veux créer plusieurs images? il semblerait que ce que je veux, c'est avoir une seule image contenant le contenu d'autres images, par exemple. neo4j et node.js
J'ai trouvé aucune directive pour déclarer des dépendances dans le manuel de référence. n'y a-t-il pas de dépendances comme dans RPM où, pour pouvoir exécuter mon image, le contexte appelant doit d'abord installer les images dont il a besoin?
Je suis confus...
qu'est-ce qu'une image de base?
Un ensemble de fichiers, plus EXPOSE
'd ports, ENTRYPOINT
et CMD
.
Vous pouvez ajouter des fichiers et construire une nouvelle image à partir de cette image de base, avec une nouvelle Dockerfile
commençant par une directive FROM
: l’image mentionnée après FROM
est "l’image de base" de votre nouvelle image.
cela signifie-t-il que si je déclare
neo4j/neo4j
dans une directiveFROM
, lorsque mon image est exécutée, la base de données neo s'exécutera automatiquement et sera disponible dans le conteneur sur le port 7474?
Seulement si vous n'écrasez pas CMD
et ENTRYPOINT
.
Mais l’image en elle-même suffit: vous utiliseriez un FROM neo4j/neo4j
si vous deviez ajouter des fichiers associés à neo4j
pour votre utilisation particulière de neo4j
.
FROM
peut apparaître plusieurs fois dans un même fichier Docker
Ne pas: il est de toute façon proposé de supprimer cette "fonctionnalité" ( numéro 13026 )
Issue 14412 mentionne:
Utiliser plusieurs
FROM
n'est pas vraiment une fonctionnalité, mais un bogue (enfin, la limite est étroite et il y a peu de cas d'utilisation de plusieursFROM
dans un fichier Docker).
Mise à jour de mai 2017 (18 mois plus tard), avec docker (moby) 17.05-ce .
Plusieurs FROM peuvent être utilisés dans un seul fichier Docker.
Voir " Modèle de générateur vs. Constructions à plusieurs étages dans Docker " (by Alex Ellis) et PR 31257 par Tõnis Tiigi.
Avant:
Le modèle de construction implique l’utilisation de deux images Docker - une pour effectuer une construction et une autre pour envoyer les résultats de la première génération sans pénalité pour la chaîne de construction et l’outillage de la première image.
Après:
La syntaxe générale implique l'ajout de
FROM
fois supplémentaires dans votre fichier Docker - la dernière instructionFROM
étant celle qui est la dernière image de base. Pour copier des artefacts et des sorties d'images intermédiaires, utilisezCOPY --from=<base_image_number>
.
Première partie du fichier 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 .
Deuxième partie du même (!) Fichier Docker:
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"]
Le résultat serait deux images, une pour la construction, une avec l'application résultante (beaucoup, beaucoup plus petit)
REPOSITORY TAG IMAGE ID CREATED SIZE
multi latest bcbbf69a9b59 6 minutes ago 10.3MB
golang 1.7.3 ef15416724f6 4 months ago 672MB