47 votes

Comment reconstruire et mettre à jour un conteneur sans temps d'arrêt avec docker-composer?

J'apprécie beaucoup l'aide de docker-composer.

Par exemple. sur mon serveur, quand je veux mettre à jour mon application avec des modifications mineures, j'ai seulement besoin d' git pull origin master && docker-compose restart, fonctionne parfaitement.

Mais parfois, j'ai besoin de reconstruire (eg. J'ai ajouté un mécanisme national de prévention de la dépendance, besoin d'exécuter npm install de nouveau).

Dans ce cas, je n' docker-compose build --no-cache && docker-compose restart.

Je m'attends à ce vers :

  • créer une nouvelle instance de mon conteneur
  • arrêter le conteneur existant (d'après la plus récente a fini de construire)
  • lancer une nouvelle
  • en option supprimer l'ancienne version, mais cela pourrait être fait manuellement

Mais dans la pratique, il semble redémarrer l'ancien nouveau.

C'est le comportement attendu?

Comment puis-je gérer une reconstruction et d'en lancer une nouvelle , après il est construit?

Peut-être que j'ai raté une commande spécifique? Ou serait-il judicieux d'en avoir?

33voto

denov Points 332

le manuel docker-composition de redémarrer

Si vous apportez des modifications à votre menu fixe-composer.yml configuration de ces les changements ne sera pris en compte après l'exécution de cette commande.

vous devriez être en mesure de le faire

$docker-compose up -d --no-deps --build <service_name>

L' --no-deps ne sera pas démarrer les services liés.

31voto

Nanne Points 35880

Le problème est qu' restart permet de redémarrer votre actuelle des conteneurs, ce qui n'est pas ce que vous voulez.

Comme un exemple, j'ai juste fait ce

  • modifier le menu fixe de fichier pour l'une des images
  • appelez docker-compose build de construire les images
  • appelez docker-compose down1 et docker-compose up
    • docker-compose restart ne fonctionnera PAS ici
    • à l'aide de docker-compose start au lieu de cela ne fonctionne pas

Pour être honnête, je ne suis pas complètement sûr que vous devez faire un down premier abord, mais qui devrait être facile à vérifier.1 La ligne de fond est que vous devez appeler up. Vous verrez les conteneurs de modifié les images de redémarrer, mais pour l'image, vous verrez recreating.

L'avantage de cette plus juste d'appeler up --build , c'est que vous pouvez voir le processus de construction de la première avant de redémarrer.

1: de la commentaires; de down n'est pas nécessaire, vous pouvez les appeler up --build. A certains "bas-côtés, y compris le possible est néfaste pour votre (volume)de données.

23voto

jkinkead Points 2392

Utiliser l' --build drapeau de l' up de commande, avec l' -d drapeau pour exécuter vos contenants à l'arrière-plan:

docker-compose up -d --build

Cela va reconstruire toutes les images dans votre fichier composer, puis redémarrez tous les récipients dont les images ont changé.

-d suppose que vous ne voulez pas garder tout ce qui se passe dans votre shell de premier plan. De ce fait, il se comporte plus comme restart, mais il n'est pas nécessaire.

9voto

mike Points 580

Ne pas gérer l'environnement de votre application directement. Utilisez l'outil de déploiement comme Éleveur. Avec elle, vous serez en mesure de mettre à niveau votre dockerized application sans aucun temps d'arrêt et même rétrograder, il devrait vous en avez besoin.

L'exécution de l'Éleveur est aussi facile que l'exécution d'un autre conteneur docker comme cet outil est disponible dans le Docker Hub.

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