Docker
Plusieurs processus dans une instance de conteneur
Recherche…
Remarques
Chaque conteneur devrait généralement héberger un processus. Si vous avez besoin de plusieurs processus dans un conteneur (par exemple, un serveur SSH pour vous connecter à votre instance de conteneur en cours d'exécution), vous pouvez avoir l'idée d'écrire votre propre script shell qui lance ces processus. Dans ce cas, vous devez faire attention à la gestion de SIGNAL
par vous-même (par exemple, rediriger un SIGINT
capturé vers les processus enfants de votre script). Ce n'est pas vraiment ce que vous voulez. Une solution simple consiste à utiliser supervisord
tant que processus racine de conteneur qui prend en charge la gestion de SIGNAL
et la durée de vie de ses processus enfants.
Mais gardez à l’esprit que ce n’est pas la "voie des dockers". Pour obtenir cet exemple dans le mode docker, connectez-vous à l' docker host
(la machine sur laquelle le conteneur s'exécute) et exécutez docker exec -it container_name /bin/bahs
. Cette commande vous ouvre un shell dans le conteneur comme le ferait ssh.
Dockerfile + supervisord.conf
Pour exécuter plusieurs processus, par exemple un serveur Web Apache avec un démon SSH dans le même conteneur, vous pouvez utiliser supervisord
.
Créez votre fichier de configuration supervisord.conf
comme:
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
Puis créez un Dockerfile
comme:
FROM ubuntu:16.04
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]
Ensuite, vous pouvez construire votre image:
docker build -t supervisord-test .
Ensuite, vous pouvez l'exécuter:
$ docker run -p 22 -p 80 -t -i supervisord-test
2016-07-26 13:15:21,101 CRIT Supervisor running as root (no user in config file)
2016-07-26 13:15:21,101 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
2016-07-26 13:15:21,112 INFO supervisord started with pid 1
2016-07-26 13:15:21,113 INFO spawned: 'sshd' with pid 6
2016-07-26 13:15:21,115 INFO spawned: 'apache2' with pid 7
...