web-dev-qa-db-fra.com

Devrais-je utiliser docker-composer ou exécuter?

Existe-t-il une raison d'utiliser run pour démarrer un fichier docker-compose.yml ou devez-vous simplement utiliser up?

Je comprends que run peut démarrer un conteneur spécifique, mais je fais référence au cas où vous l'utilisez sans spécifier de conteneur afin qu'il démarre tous vos conteneurs yml.

89
Raif

Comme mentionné dans docker-compose run :

La commande passée par run remplace la commande définie dans la configuration du service .
Par exemple, si la configuration du service Web est démarrée avec bash, alors _docker-compose run web python app.py_ le remplace par _python app.py_.

La deuxième différence est que la commande _docker-compose run_ ne crée aucun des ports spécifiés dans la configuration du service .
Ceci évite les collisions de ports avec des ports déjà ouverts. Si vous souhaitez que les ports du service soient créés et mappés à l'hôte, spécifiez l'indicateur --service-ports:

_$ docker-compose run --service-ports web python manage.py Shell
_

Donc, à moins que vous n'ayez ces besoins spécifiques (remplacer une commande ou n'exécuter qu'un seul conteneur sur différents ports), _docker-compose up_ (même pour un conteneur) est suffisant.

Pouvez-vous m'aider à expliquer pourquoi ou à quel moment vous ne souhaitez pas que les ports soient créés? C’est pourquoi ou quand ils pourraient entrer en conflit avec des ports déjà ouverts

Tout simplement parce que _docker-compose run_ est conçu pour exécuter des commandes uniques pour vos services.
Cela signifie que si vous avez déjà effectué un _docker-compose up_, tous vos conteneurs s'exécutent déjà sur leurs ports spécifiés à partir de _docker-compose.yml_.
Faire un _docker-compose run_ à ce stade (pour exécuter une commande unique), s’il respectait le même port, échouerait immédiatement. D'où la non-création par défaut de ces ports.


Autre cas d'utilisation (in référence des variables d'environnement Compose ):

Pour voir quelles variables d'environnement sont disponibles pour un service, exécutez _docker-compose run SERVICE env_.

100
VonC

J'aimerais souligner que si vous utilisez Python avec le débogueur pdb:

import pdb; pdb.set_trace()

Si vous exécutez votre script en utilisant:

docker-compose up

Cependant, si vous utilisez run, le débogueur sera redirigé comme prévu:

docker-compose run
18
quickinsights