0
votes

Exécutez plusieurs scripts dans l'image Docker

Bonjour, je me demande s'il est possible d'exécuter deux scripts en même temps sur le début du conteneur Docker. Le premier script doit exécuter une application client et la deuxième application de serveur d'exécution comme arrière-plan.


4 commentaires

J'ai réalisé cela en utilisant le gestionnaire de processus (dans mon cas cirque , mais il existe d'autres solutions similaires) . Cela a du sens pour les processus à long terme (semble que votre cas). En outre, il ajoute que si vous ne gérez pas une erreur d'erreur dans votre application et que cela s'arrête en raison de cette exception, le cirque le redémarrera. Comme un inconvénient (pour certains cas), c'est une application Python, il a donc besoin de Python Runtime et avait besoin de bibliothèques à installer dans votre conteneur Docker.


Pouvez-vous simplement utiliser 2 conteneurs?


Ok kami mais une seule application est python. Ben je dois utiliser un conteneur


@Progshed, ce n'est pas un problème qu'une seule application est python. Vous pouvez exécuter n'importe quel script / application avec cette approche. En fait, j'ai exécuté des applications Java avec un tel gestionnaire de processus dans Docker Contener.


3 Réponses :


2
votes

Vous pouvez Utiliser cmd dans votre Dockerfile et Utilisez la commande et pour exécuter deux commandes en parallèle : xxx

(où server_command est la commande utilisée pour démarrer Le serveur et client_command est la commande utilisée pour démarrer le client)


1 commentaires

Notez que le conteneur quittera lorsque Client_command complète, Docker ne remarquera pas si Server_Command sort de manière inattendue et des commandes telles que Docker STOP n'enverra pas un signal à l'un ou l'autre processus.



1
votes

La position officielle de Docker à ce sujet a toujours été qu'il est préférable de disposer d'un seul service unique dans un conteneur. Cela dit, ils maintiennent également une documentation très robuste des solutions possibles pour obtenir plusieurs services dans un seul conteneur.

https://docs.docker.com/config/containers/multi- service_container /

Un résumé rapide est essentiellement que lorsque vous avez plusieurs services, vous devez avoir un certain type de processus "init" pour agir en tant que parent pour tous les services dans le conteneur.

Il y a deux façons de faire ceci:

  1. avoir un script shell qui exécute chaque service comme travail d'arrière-plan.
  2. Lancez un système d'init complet dans le conteneur et lancez les services sous cela.

    Les deux sont problématiques. Le premier parce que Bash n'est pas un système init et vous pouvez vous retrouver avec toutes sortes de maux de tête lorsqu'il n'agit pas comme un. Le second parce qu'un système init est une chose assez intense de mettre dans un conteneur Docker.

    Après avoir dit tout cela, La meilleure solution consiste à diviser vos services en deux conteneurs.


0 commentaires

1
votes

Comme mentionné avoir plusieurs processus n'est pas une pratique suggérée.

Néanmoins, dans certains scénarios est nécessaire pour avoir plusieurs processus. Dans ces cas, l'approche habituelle consiste à utiliser un gestionnaire de processus comme superviseur .


0 commentaires