Est-il possible de générer un Dockerfile à partir d'une image? Je veux savoir pour deux raisons:
Je peux télécharger des images à partir du référentiel mais j'aimerais voir la recette qui les a générées.
J'aime l'idée de sauvegarder des instantanés, mais une fois que j'aurai terminé, ce serait bien d'avoir un format structuré pour revoir ce qui a été fait.
image
repository
docker
user1026169
la source
la source
Réponses:
Vous pouvez.
Il tirera automatiquement l'image de docker cible et l'exportera
Dockerfile
. Le paramètre-sV=1.36
n'est pas toujours requis.Référence: https://hub.docker.com/repository/docker/alpine/dfimage
ci-dessous est l'ancienne réponse, cela ne fonctionne plus.
la source
Pour comprendre comment une image docker a été créée, utilisez la
docker history --no-trunc
commande.Vous pouvez créer un fichier Docker à partir d'une image, mais il ne contiendra pas tout ce que vous souhaitez pour comprendre pleinement comment l'image a été générée. Vous pouvez raisonnablement extraire les parties MAINTAINER, ENV, EXPOSE, VOLUME, WORKDIR, ENTRYPOINT, CMD et ONBUILD du dockerfile.
Le script suivant devrait fonctionner pour vous:
J'utilise cela dans le cadre d'un script pour reconstruire des conteneurs en cours d'exécution sous forme d'images: https://github.com/docbill/docker-scripts/blob/master/docker-rebase
Le Dockerfile est principalement utile si vous souhaitez pouvoir reconditionner une image.
La chose à garder à l'esprit est qu'une image de docker peut en fait être la sauvegarde tar d'une machine réelle ou virtuelle. J'ai fait plusieurs images de docker de cette façon. Même l'historique de construction me montre l'importation d'un énorme fichier tar comme première étape dans la création de l'image ...
la source
Error response from daemon: page not found
D'une manière ou d'une autre, j'ai absolument manqué la commande réelle dans la réponse acceptée, alors la voici encore, un peu plus visible dans son propre paragraphe, pour voir combien de personnes sont comme moi
la source
ub.docker.com/r/chenzj/dfimage
? C'est même une réponse plus récente.docker history
imprime les lignes Dockerfile dans un ordre inverse et laisse tomber lesRUN
instructions (vous obtenez uniquement la commande elle-même, pas leRUN
keyworkd en face d'elle) et d'autres choses, vous devez donc le modifier manuellement pour accéder à un Dockerfile à construire. Cet autre outil peut effectuer cette modification automatiquement pour vous (je ne l'ai pas essayé, donc je ne sais pas.)Une solution bash:
Explications étape par étape:
Exemple:
la source
Ce n'est pas possible à ce stade (sauf si l'auteur de l'image a explicitement inclus le Dockerfile).
Cependant, c'est définitivement quelque chose d'utile! Il y a deux choses qui aideront à obtenir cette fonctionnalité.
la source
Mise à jour de décembre 2018 à la réponse de BMW
la source
Ceci est dérivé de la réponse de @ fallino, avec quelques ajustements et simplifications en utilisant l'option de format de sortie pour l' historique du docker . Étant donné que macOS et Gnu / Linux ont des utilitaires de ligne de commande différents, une version différente est nécessaire pour Mac. Si vous n'avez besoin que de l'un ou de l'autre, vous pouvez simplement utiliser ces lignes.
la source
ci-dessous est sortie de la commande dfimage: -
$ dfimage 0f1947a021ce
DU NŒUD: 8 WORKDIR / usr / src / app
Fichier COPY: e76d2e84545dedbe901b7b7b0c8d2c9733baa07cc821054efec48f623e29218c in ./
Installation de RUN / bin / sh -c npm
COPY dir: a89a4894689a38cbf3895fdc0870878272bb9e09268149a87a6974a274b2184a in.
EXPOSE 8080
CMD ["npm" "start"]
la source