Docker
Wiele procesów w jednej instancji kontenera
Szukaj…
Uwagi
Zwykle każdy kontener powinien obsługiwać jeden proces. Jeśli potrzebujesz wielu procesów w jednym kontenerze (np. Serwerze SSH, aby zalogować się do działającej instancji kontenera), możesz wymyślić własny skrypt powłoki, który uruchamia te procesy. W takim przypadku SIGNAL
sam zadbać o obsługę SIGNAL
(np. Przekierowanie złapanego SIGINT
do procesów potomnych skryptu). Tak naprawdę nie tego chcesz. Prostym rozwiązaniem jest użycie supervisord
jako procesu rootowania kontenerów, który dba o obsługę SIGNAL
i jego żywotność procesów potomnych.
Pamiętaj jednak, że nie jest to „sposób dokowania”. Aby osiągnąć ten przykład w sposób dokowania, należy zalogować się do docker host
(maszyny, na której działa kontener) i uruchomić polecenie docker exec -it container_name /bin/bahs
. To polecenie otwiera powłokę wewnątrz kontenera, tak jak zrobiłby to ssh.
Dockerfile + supervisord.conf
Aby uruchomić wiele procesów, np. Serwer WWW Apache wraz z demonem SSH w tym samym kontenerze, możesz użyć supervisord
.
Utwórz plik konfiguracyjny supervisord.conf
, taki jak:
[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"
Następnie utwórz plik Dockerfile
taki jak:
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"]
Następnie możesz zbudować swój wizerunek:
docker build -t supervisord-test .
Następnie możesz go uruchomić:
$ 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
...