其实Docker的宗旨是一个容器,一个业务,但很多东西并没有这么理想化。
比如有个小需求就是在Nginx、Lighttpd的容器里跑起crond,定期调用logrotate切割一下log文件。
用母机的crontab可能反倒好实现,直接执行一个docker语句就可以,但是这样迁移有点麻烦,用crond单独一个容器的话,我不知道要怎么垮过容器去调用一个脚本??
所以自己各种尝试最后用entrypoint一个sh文件的方式实现了同时跑Lighttpd和crond:
Start.sh文件
1 2 3 |
#!/bin/sh /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf & /usr/sbin/crond -f |
Dockerfile里
1 2 3 4 5 |
... RUN apk --no-cache add logrotate ADD start.sh /root/ ENTRYPOINT ["/root/start.sh"] ... |
这样就实现了启动后,/root/start.sh里两个子进程,Lighttpd和crond,就是不知道这样是否会有什么隐患。
按照google出来的方法,应该安装一个supervisor,且Docker本来就很不提倡这种一个容器2个进程的行为。