dockerの場合はdaemonで動かすのではなく、アプリを直接動かすのが基本
起動時のコマンドが全てのプロセスの原点となる
-> bashを抜けるとコンテナが停止する
$ sudo docker run -it –name centos centos:7.7.1908 bash
start.sh
#!bin/sh handle() { echo 'handle sigterm/sigint' exit 0 } trap handle TERM INT nginx -g "daemon off;" & wait
Dockerfile
From python:3.7.5-slim RUN pip install flask=1.1.1 COPY ./server.py /server.py ENV PORT 80 STOPSIGNAL SIGINT CMD ["python", "-u", "/server.py"]
### supervisorで複数の子プロセス(アプリ本体)を管理
From centos:7.7.1908 RUN yum install -y epel-release \ && yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \ && yum -y install nginx openssh-server supervisor \ && rm -rf /var/cache/yum/* && yum clean all RUN ssh-keygen -A COPY supervisord.conf /etc/supervisord.conf EXPOSE 22 80 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true [program:nginx] command=/usr/sbin/nginx -g "daemon off;" autostart=true autorestart=true
うーん、結構奥が深いな…