打算在单个 Dockerfile 定义的镜像打包 0xffff-flarum 用到的所有服务,尝试把论坛部署到 fly.io 上。多个进程运行在一个 Docker 容器里维护,就得考虑怎么去处理多进程之间的启动、服务的保持、启动中止信号等等等的关系,默认 Docker 容器针对单个进程而设计,这时就得有个独立的程序,作为容器启动的 1 号 init 进程去处理各种和外界的关系。
Docker 生态常用的 dumb-init 只支持一个进程,集成 Linux 发行版常用的 systemd 感觉太重且不优雅(在 Unix 哲学体系下,systemd 的设计算是个 异端,展开大概是个长长故事)。
然后发现了 just-containers/s6-overlay,基于 s6 针对 Docker 场景做了适配,它的设计哲学是:
Our interpretation of "The Docker Way" is thus:
- Containers should do one thing
- Containers should stop when that thing stops
进一步也引出了 s6 背后的一套有别于 systemd 的守护进程工具体系,感觉蛮有意思~
参考:init - ArchWiki
后续使用有啥心得再在楼下更新。