Docker
Несколько процессов в одном экземпляре контейнера
Поиск…
замечания
Обычно в каждом контейнере должен быть один процесс. Если вам нужно несколько процессов в одном контейнере (например, SSH-сервер для входа в ваш экземпляр запущенного контейнера), вы можете получить идею написать собственный сценарий оболочки, который запускает эти процессы. В этом случае вам нужно было позаботиться об обработке SIGNAL
самостоятельно (например, перенаправление пойманного SIGINT
дочерним процессам вашего скрипта). Это не то, что вы хотите. Простое решение - использовать supervisord
в качестве корневого процесса контейнеров, который заботится об обработке SIGNAL
и о продолжительности его дочерних процессов.
Но имейте в виду, что это не «путь докеров». Чтобы достичь этого примера на докере, вы должны войти в docker host
(машина, на которой запущен контейнер) и запустить docker exec -it container_name /bin/bahs
. Эта команда открывает оболочку внутри контейнера, как это делает ssh.
Dockerfile + supervisord.conf
Чтобы запустить несколько процессов, например, веб-сервер Apache вместе с демоном SSH внутри одного и того же контейнера, вы можете использовать supervisord
.
Создайте свой файл конфигурации supervisord.conf
например:
[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"
Затем создайте Dockerfile
например:
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"]
Затем вы можете создать свой образ:
docker build -t supervisord-test .
После этого вы можете запустить его:
$ 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
...