#### 1. 背景 由于工作需要,让多个进程跑在一个容器里,虽然一般不建议这么做,但你懂的,不可抗力. 关于s6-overlay的介绍不是很多,主要就是[github](https://github.com/just-containers/s6-overlay#dropping-privileges "github")上的文档,本文主要参考就是它,仅用于记录个人测试使用经历,更多使用介绍请参考官方文档 #### 2. Dockerfile ``` FROM alpine:3.10 ENV LANG C.UTF-8 ENV TIMEZONE Asia/Shanghai RUN echo -e "http://mirrors.aliyun.com/alpine/v3.10/main\nhttp://mirrors.aliyun.com/alpine/v3.10/community" > /etc/apk/repositories \ && apk add -U tzdata && ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo "${TIMEZONE}" > /etc/timezone \ && apk add curl ADD s6-overlay-amd64.tar.gz / COPY ./service-script-permisson /etc/fix-attrs.d/ ENTRYPOINT ["/init"] CMD ["/bin/s6-svscan", "/opt/service"] ``` #### 3. service-script-permisson ``` 作用:放在/etc/fix-attrs.d/目录中,用于初始化service中各服务的文件夹和文件的权限,文件名字随意 $ cat service-script-permisson /opt/service true root 0751 0700 ``` #### 4. README ``` docker build -t s6:v1 . docker run --rm -it -v /opt/service:/opt/service s6:v1 ``` #### 5. service示例:/opt/service ``` /opt/service/ ├── app1 │ ├── finish │ └── run ├── app2 │ ├── finish │ └── run ├── app3 │ ├── finish │ └── run └── catalina ├── finish └── run [root@localhost]# cat /opt/service/catalina/run #!/bin/sh sed -i '2a CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,suspend=n,server=y"' /usr/local/tomcat/bin/catalina.sh exec /usr/local/tomcat/bin/catalina.sh run [root@localhost]# cat /opt/service/catalina/finish #!/bin/sh echo "tomcat stopped" [root@localhost]# cat app1/run #!/bin/sh echo "app1 start" >> /tmp/app.log sleep 5 echo "first=1" >> /opt/start.log sleep 20 [root@localhost]# cat app1/finish #!/bin/sh echo "app1 stopped" >> /tmp/app.log > /opt/start.log [root@localhost]# cat app2/run #!/bin/sh sleep 5 if [ `cat /opt/start.log | grep 'first=1'` ];then echo "app2 start !" >> /tmp/app.log tail -f /tmp/app.log fi [root@localhost]# cat app2/finish #!/bin/sh echo "app stopped" >> /tmp/app.log [root@localhost]# cat app3/run #!/bin/sh sleep 5 if [ `cat /opt/start.log | grep 'first=1'` ];then echo "app3 start !" >> /tmp/app.log tail -f /tmp/app.log fi [root@localhost]# cat app3/finish #!/bin/sh echo "app3 stopped" >> /tmp/app.log 上述脚本中catalina和app1会先启动,app2 app3会等待5秒钟,检测/opt/start.log中是否有'first=1',如果有则启动,没有则循环检测 app1在20秒之后会退出,s6会自动检测让app1重启 ``` #### 6. github网址 ``` https://github.com/just-containers/s6-overlay#dropping-privileges ``` 最后修改:2019 年 08 月 21 日 11 : 09 AM © 著作权归作者所有