Si je cours composer install
de mon hôte, je frappe mon cache compositeur local:Comment mettre en cache les téléchargements du gestionnaire de paquets pour les versions de docker?
- Installing deft/iso3166-utility (1.0.0)
Loading from cache
Pourtant, lors de la construction d'un conteneur ayant dans sa Dockerfile:
RUN composer install -n -o --no-dev
je télécharger toutes les choses, par exemple:
- Installing deft/iso3166-utility (1.0.0)
Downloading: 100%
C'est normal, mais j'aime l'éviter. Comme même sur une reconstruction, il serait également tout télécharger à nouveau.
Je voudrais avoir un cache universel pour compositeur que je pourrais également partager pour d'autres projets docker.
Je regardai cette question et trouvé l'approche define a volume in the Dockerfile:
ENV COMPOSER_HOME=/var/composer
VOLUME /var/composer
J'ai ajouté que à mon Dockerfile
, et devrait seulement télécharger les fichiers une fois, et appuyez sur le cache après.
Pourtant, quand je modifie mon composer
, par exemple. supprimer le drapeau -o
, et relancer docker build .
, je m'attendais à frapper le cache sur la construction, mais je télécharge encore les vendeurs à nouveau.
Comment les volumes sont supposés fonctionner pour avoir un cache de données dans un conteneur docker?
Le volume persistera pour une instance de conteneur, mais pas sur la construction. Vous pouvez créer un volume nommé qui persistera dans un emplacement statique, mais vous couplerez une solution à un environnement. Vous devez penser à ce que vous voulez faire dans la construction vs après. Vous pouvez configurer une sorte de référentiel local pour agir en tant que cache/proxy. – ldg
Je me bats aussi avec ça. Avez-vous trouvé un moyen de sortir de cela? Je pensais que peut-être utiliser un proxy HTTP et diriger Docker à utiliser pourrait fonctionner. Potentiellement excluant hub.docker.com à partir du proxy pour ne pas conserver deux copies d'images téléchargées. – gooli
@gooli Posté une réponse sur comment je traite le problème. Merci pour le rappel. – k0pernikus