web-dev-qa-db-fra.com

La génération Docker n'utilise pas le cache

docker build n'utilise pas son cache.

docker build -f Dockerfile .

génère la même sortie que celle-ci:

docker build -f Dockerfile --no-cache .

Je modifie le Dockerfile, en ajoutant des commandes à la fin du fichier. Les couches précédentes doivent donc être mises en cache et valides.

J'ai beaucoup d'espace disque.

Des idées?

Docker version 17.06.1-ce, build 874a737

Dockerfile:

FROM registry:5000/base/python:xenial

RUN mkdir /code
COPY . /code

RUN apt-get update && \
    apt-get install -y \
    vim \
    less

COPY /etc/foo /etc/foo

ENTRYPOINT ["/bin/bash"]
18
Mike Muldoon

À partir de votre Dockerfile, si vous ajoutez des lignes à votre Dockerfile ou modifiez le code en cours de création, il n'y a qu'une seule ligne qui peut être mise en cache:

RUN mkdir /code

Après cela, vous effectuez:

COPY . /code

Puisque vous avez modifié votre Dockerfile, le contenu de . ont changé (le Dockerfile fait partie de .) et donc le COPY doit être exécuté à nouveau, générant une nouvelle couche. Une fois que vous avez généré une nouvelle couche, chaque couche suivante n'a plus de cache et doit être reconstruite.

Pour améliorer la mise en cache, pensez à placer les lignes qui changent moins vers le haut de votre Dockerfile. Cela laisserait le COPY . /code ligne à la toute fin du fichier car il changera presque à chaque fois.

28
BMitch