站点图标 星露谷值班站长

Docker容器多任务运行

原创内容, 禁止转载.

容器运行启动主要依靠 Dockerfile 里面的 ENTRYPOINTCMD

官方建议一个容器里面运行一个进程,如果我们需要多个进程运行就需要自己去定义脚本

我们现在程序有 sshnodejs程序,而且在一个项目内部。如果我启动一个 sshd 进程那么 nodejs 进程无法启动,这个时候就需要自定义脚本。

示例脚本,我们可以根据自己的需要去修改定制

1. 定制脚本

#!/bin/bash


/usr/sbin/sshd &
status=$?
if [$status -ne 0]; then
  echo "Failed to start sshd: $status"
  exit $status
fi

cd /data/www/project && pm2 start app.js

if [$status -ne 0]; then
  echo "Failed to start pm2: $status"
  exit $status
fi

while /bin/true; do
  ps aux |grep /usr/sbin/sshd |grep -q -v grep
  PROCESS_1_STATUS=$?
  ps aux |grep pm2 |grep -q -v grep
  PROCESS_2_STATUS=$?
  if [$PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0]; ]; then
    echo "One of the processes has already exited."
    exit -1
  fi
  sleep 60
done

Dockerfile 示例

COPY start.sh /usr/bin/start
RUN chmod +x /usr/bin/start
EXPOSE 22
EXPOSE 80
ENTRYPOINT ["/usr/bin/start"]

 

2. 使用 supervisord

第二种方法是使用 supervisord 这个进程管理工具,然后在 Dockerfile 里面定义

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]

 


退出移动版