Comment obtenir docker-composer de toujours re-créer des conteneurs de nouvelles images?
Mon menu fixe les images sont construites sur un Jenkins serveur CI et sont poussés à nos Docker Registre. Mon objectif est à la disposition des environnements avec docker-composer qui commencent toujours à l'origine construit des images.
Je suis actuellement en utilisant le panneau-composer 1.3.2 ainsi que 1.4.0 sur des machines différentes, mais nous avons également utilisé les anciennes versions précédemment.
J'ai toujours utilisé le docker-compose pull && docker-compose up -d
commandes pour extraire les nouvelles images de la base de registre et de les démarrer. Je crois que mon préféré comportement travaillait comme prévu jusqu'à un certain point dans le temps, mais depuis docker-compose up
commencé à ré-exécuter arrêté précédemment conteneurs au lieu de commencer la construit à l'origine des images à chaque fois.
Est-il un moyen de se débarrasser de ce comportement? Pourrait être celui qui est câblée dans le menu fixe-composer.yml fichier de configuration pour ne pas dépendre de "ne pas oublier" quelque chose sur la ligne de commande à chaque invocation?
ps. En plus de trouver un moyen pour atteindre mon objectif, j'aimerais aussi en savoir un peu plus sur le contexte de ce comportement. Je pense que l'idée de base de Docker est de construire un immuable de l'infrastructure. Le comportement actuel de docker-composition de l'air à la plaine de choc avec cette approche.. ou dois-je manquer quelques points ici?
Vous devez vous connecter pour publier un commentaire.
docker-compose up --force-recreate
est une option, mais si vous l'utilisez pour la CI, je voudrais commencer à le construire avecdocker-compose rm -f
pour arrêter et supprimer les conteneurs et les volumes (ensuite, il suivra avec pull et jusqu').C'est ce que j'utilise:
La raison conteneurs sont recréés est de préserver les volumes de données qui pourrait être utilisée (et il arrive aussi de faire des
up
beaucoup plus rapide).Si vous êtes en train de faire CI vous ne souhaitez pas, il suffit donc de supprimer tout ce qui devrait vous obtenir ce que vous voulez.
Mise à jour: utilisation
up --build
qui a été ajouté dansdocker-compose
1.7docker-compose up -d
pas ?docker-compose pull
avantdocker-compose rm -f
, vous pouvez économiser encore plus de tempsrm
supprime les conteneurs et lespull
tire des images. Je ne vois pas comment cela permettrait d'économiser plus de temps. Pourriez-vous élaborer ?--pull
option que ledocker-compose pull
commande va pas le faire. Il peut donc y avoir une autre étape de l'exécution dedocker-compose build --no-cache --pull
et puis tout simplementdocker-compose up -d
La seule solution qui a fonctionné pour moi a cette commande :
Ce extraira automatiquement les frais de l'image de pensions et de ne pas utiliser le cache de la version pré-créer avec les paramètres que vous avez utilisé avant.
Par le courant officiel la documentation il y a une coupe courte qui bloque et supprime les conteneurs, les réseaux, les volumes, et les images créées par les, si ils sont déjà arrêté ou partiellement supprimée et ainsi de suite, puis il va faire l'affaire:
Alors si vous avez de nouvelles modifications sur vos images ou Dockerfiles utilisation:
Enfin:
docker-compose up
En une seule commande:
docker-compose down && docker-compose build --no-cache && docker-compose up
docker-compose build --no-cache
est nécessaire uniquement si il y a des changements sur les Dockerfiles.docker-compose up
, est nécessaire pour reconstruire les services avecdocker-compose build
.Vous pouvez passer
--force-recreate
àdocker compose up
, qui devrait utiliser des conteneurs.Je pense que le raisonnement derrière réutilisation des contenants est de préserver tous les changements au cours du développement. La Note qui le Composent fait quelque chose de similaire avec les volumes, qui sera également persistent entre le conteneur de loisirs (un recréé conteneur qui va s'attacher à son prédécesseur volumes). Cela peut être utile, par exemple, si vous avez un Redis conteneur utilisé comme un cache et vous ne voulez pas perdre la mémoire cache à chaque fois que vous faites un petit changement. À d'autres moments, il est juste confus.
Je ne crois pas qu'il n'y a aucune façon vous pouvez forcer ce à partir de la composition de fichier.
Sans doute il est en rupture avec immuables principes de l'infrastructure. Le contre-argument est probablement que vous n'utilisez pas de message dans la production (encore). Aussi, je ne suis pas sûr que je suis d'accord que immuables infra est l'idée de base de Docker, même si c'est certainement un bon cas d'utilisation/point de vente.
--force-recreate
ne fonctionne pas pour moi ... l'Image n'est pas tirée, même si une version plus récente est là...Si il ya quelque chose de nouveau sera reconstruit.