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"]

 


欢迎留言