Docker
Meerdere processen in één containerinstantie
Zoeken…
Opmerkingen
Gewoonlijk zou elke container één proces moeten bevatten. Als u meerdere processen in één container nodig hebt (bijvoorbeeld een SSH-server om u aan te melden bij uw actieve containerinstantie), kunt u het idee krijgen om uw eigen shellscript te schrijven dat deze processen start. In dat geval moest u zelf zorgen voor de afhandeling van het SIGNAL
(bijv. Het omleiden van een gevangen SIGINT
naar de onderliggende processen van uw script). Dat is niet echt wat je wilt. Een eenvoudige oplossing is supervisord
als het rootproces van de containers dat zorgt voor de verwerking van SIGNAL
en de levensduur van de onderliggende processen.
Maar houd er rekening mee dat dit niet de "docker-manier" is. Om dit voorbeeld op de docker-manier te bereiken, logt u in op de docker host
(de machine waarop de container draait) en voert u docker exec -it container_name /bin/bahs
. Met deze opdracht opent u een shell in de container zoals SSH zou doen.
Dockerbestand + supervisord.conf
Om meerdere processen uit te voeren, bijvoorbeeld een Apache-webserver samen met een SSH-daemon in dezelfde container, kunt u supervisord
.
Maak uw supervisord.conf
configuratiebestand als:
[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"
Maak vervolgens een Dockerfile
als:
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"]
Vervolgens kunt u uw afbeelding samenstellen:
docker build -t supervisord-test .
Daarna kunt u het uitvoeren:
$ 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
...