34 votes

Emplacement/taille et ID du cache du kit de construction Docker

Il y a le Docker buildkit : https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md qui dispose d'une option supplémentaire pour RUN (entre autres) : le --mount=type=cache .

Ce que je n'ai pas pu comprendre à partir de la documentation est :

  1. où est stocké ce cache ?
  2. comment peut-on supprimer/inspecter cela ?
  3. comment buildkit décide-t-il de la place du cache ? Par exemple, si j'ai le même fichier Docker à deux endroits, les caches seront-ils les mêmes ? Quelle est la clé du cache ?
  4. l'option ID est toujours ambiguë. Si je spécifie le même ID dans différents dockerfiles, feront-ils référence au même cache ?

18voto

Marko Kohtala Points 119

Oui, c'est un peu vague dans docker 20.10.5. Une ou deux demandes de retrait pourraient être utiles pour mettre à jour la documentation.

  1. Le cache utilise le même pilote de stockage que celui utilisé pour les couches d'images. Les métadonnées sont stockées dans des bases de données à /var/lib/docker/buildkit . Souvent, la couche elle-même est en /var/lib/docker/overlay2/<ID>/diff/ . Pour <ID> voir ci-dessous.
  2. docker buildx du --verbose liste des cachettes de construction. Vous pouvez également l'inspecter à partir de docker system df -v --format '{{ .BuildCache | json }}' . Le type de cache exec.cachemount est le RUN --mount type=cache . Vous pouvez trouver la couche en utilisant le ID qui n'est pas le même que celui utilisé dans --mount id . Le type de montage est implémenté par buildkit, donc l'option docker run --mount ne le reconnaît pas. Pour s'en débarrasser, il faut docker buildx prune o docker build --no-cache .
  3. La clé du cache est la valeur de id= . id La valeur par défaut est celle de target . Vous devez spécifier id quand vous avez besoin de différents caches au même target .
  4. Oui. Il s'agit du même cache, quel que soit le target ou Dockerfile. Les différents constructeurs ont leurs propres caches, ce qui permet par exemple de séparer les caches pour les différentes architectures.

0voto

user582175 Points 59

Pour le numéro 3, il semble que lorsque l'on ne spécifie pas une id à la --mount le même cache sera utilisé, indépendamment de tout autre paramètre, comme le point de montage ou le contenu/chemin du Dockerfile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X