Comment réduire la taille de l'image Docker

12

J'ai un conteneur exécutant GlassFish. Lorsque j'ai essayé de valider une image, elle est devenue 14 Go. Plus tard, j'ai supprimé /tmp/le conteneur de 10 Go et j'ai essayé de valider une image, mais l'image est toujours de 14 Go. Il semble que la suppression de fichiers du conteneur ne se reflète pas dans la taille de l'image. Comment résoudre ce problème?

user1726453
la source
1
Personne ne peut vraiment faire de recommandations sans en savoir un peu plus sur votre configuration. Qu'est-ce que le Dockerfile? Quelle est l'arborescence de fichiers qui est ajoutée au contexte de génération Docker? L' glassfishimage Docker officielle fait environ 1 Go. Bien que sacrément grand pour une image Docker, il est toujours beaucoup plus petit que ce que vous semblez construire.
Andy Shinn
Voir cette question SO pour un howto. En outre, cette recherche Google contient un certain nombre d'articles pertinents.
Misha Brukman

Réponses:

9

Le problème auquel vous pourriez être confronté est que la suppression de fichiers dans une validation ne change pas le fait que le fichier était là dans une image précédente, de sorte que l'image précédente est toujours 14G.

Jetez un œil à la partie "Couches" de cet article: http://woudenberg.io/reducing-docker-image-size/

Pour résoudre ce problème, vous devez supprimer les éléments situés sous / tmp / dans le commit d'origine qui les a générés, afin que l'image créée à la suite de ce commit ne les inclue pas. C'est facile lorsque vous utilisez des dockerfiles mais pas sûr si possible lors de la création d'images avec des validations.

Une autre chose que vous pourriez faire est de réduire les calques en exportant / important l'image.

Juan Antonio Galán Martínez
la source
4

S'étendant sur la réponse de @Juan Antonio, Dockerfilefaire cela ne fera pas économiser de l'espace:

RUN apt-get install -y foo bar
...
RUN apt-get purge --auto-remove -y foo bar

Ce que vous devez faire à la place est:

RUN apt-get install -y foo bar && \
    && ... \
    && apt-get purge --auto-remove -y foo bar

En revanche, cela signifie moins de mise en cache, comme si quelque chose change dans cette grande ligne de commande, Docker devra réexécuter l'ensemble des commandes.

Wernight
la source