Docker comment AJOUTER un fichier sans l'enregistrer dans une image?
J'ai un ~300mo zippée fichier local que j'ajoute à un panneau de l'image. L'état suivant, puis des extraits de l'image.
Le problème est que le complément de la déclaration de résultats dans un commit qui résulte en une nouvelle couche de système de fichier de l'image ~300mo plus grand qu'il doit être.
ADD /files/apache-stratos.zip /opt/apache-stratos.zip
RUN unzip -q apache-stratos.zip && \
rm apache-stratos.zip && \
mv apache-stratos-* apache-stratos
Question: Est-il un travail autour pour AJOUTER les fichiers locaux sans causer un commit?
Une option consiste à exécuter un simple serveur web (par exemple,python -m SimpleHTTPServer
) avant de démarrer le panneau de construire, puis à l'aide de wget
pour récupérer le fichier, mais qui semble un peu brouillon:
RUN wget http://localhost:8000/apache-stratos.zip && \
unzip -q apache-stratos.zip && \
rm apache-stratos.zip && \
mv apache-stratos-* apache-stratos
Une autre option est d'extraire le fichier compressé au conteneur de départ jusqu'au lieu de la fabrication de temps, mais je préfère garder le démarrage aussi rapide que possible.
Vous devez vous connecter pour publier un commentaire.
Selon la documentation, si vous transmettez un fichier d'archive à partir du système de fichiers local (pas une URL) à AJOUTER dans le Dockerfile (avec un chemin d'accès de destination, et non pas un chemin + nom de fichier), il va décompresser le fichier dans le répertoire donné.
essayer:
et de voir si les fichiers sont là, sans plus de décompression.
.zip
fichier sur Docker 1.2.0..zip
fichiers semble être une décision prévue: github.com/docker/docker/issues/15036ADD /files/apache-stratos.zip /opt/
fait un fichier appelé/opt/apache-stratos.zip
Avec Docker 17.05+ vous pouvez utiliser un multi-étape de construire pour éviter de créer des couches supplémentaires.
Vous pouvez utiliser docker-squash de squash calques créés. Cela devrait permettre de réduire la taille de l'image de manière significative.
Malheureusement mentionnés solutions de contournement (
RUN curl ... && unzip ... & rm ...
, le décompresser sur le conteneur de démarrage) sont les seules options pour le moment (menu fixe 1.11).Il y a actuellement 3 options je pense.
Option 1: vous pouvez passer de l'un tar ou tar compressé format dans le fichier zip et de permettre
ADD
pour décompresser le fichier pour vous.Seul inconvénient, c'est tous les autres changements, comme un répertoire de renommer, de déclencher la copie sur écriture de nouveau, alors vous devez vous assurer que votre fichier tar a le contenu dans le répertoire final de la structure.
Option 2: Utilisation d'un multi-étape de construction. Extraire le fichier dans un stade précoce, effectuez les modifications, puis copier ce dossier à votre dernière étape. C'est une bonne option pour tout construire des moteurs qui ne peuvent pas utiliser BuildKit. augurar la réponse de couvre ce donc je ne vais pas répéter la même Dockerfile il possède déjà.
Option 3: BuildKit (disponible en 18.09 et plus récent) vous permet de monter des fichiers à partir d'autres endroits, y compris votre contexte, à l'intérieur d'un
RUN
de commande. Cela exige que le expérimentales de la syntaxe. Le résultant Dockerfile ressemble:Puis de le construire, vous exportez une variable avant l'exécution de votre build (vous pouvez également l'exporter dans votre .bashrc ou équivalent):
Plus de détails sur BuildKit expérimentale fonctionnalités sont disponibles ici: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md