Docker
1つのコンテナインスタンス内の複数のプロセス
サーチ…
備考
通常、各コンテナは1つのプロセスをホストする必要があります。 1つのコンテナ(例えば、実行中のコンテナインスタンスにログインするためのSSHサーバ)に複数のプロセスが必要な場合は、それらのプロセスを開始する独自のシェルスクリプトを作成することができます。その場合は、自分自身を処理するSIGNAL
注意を払わなければなりません(例えば、キャッチされたSIGINT
をスクリプトの子プロセスにリダイレクトするなど)。それは本当にあなたが望むものではありません。シンプルな解決策は、 SIGNAL
処理とその子プロセスの存続期間に注意を払うコンテナのルートプロセスとしてsupervisord
を使用することです。
しかし、これは "ドッカーの道"ではないことを覚えておいてください。この例をdockerの方法で実現するには、 docker host
(コンテナが動作するマシン)にログインし、 docker exec -it container_name /bin/bahs
ます。このコマンドは、sshが行うように、コンテナ内にシェルを開きます。
Dockerfile + supervisord.conf
同じコンテナ内にSSHデーモンと一緒にApache Webサーバーなどの複数のプロセスを実行するには、 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
...
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow