首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >s6-overlay 用于 Docker 镜像的进程管理器

s6-overlay 用于 Docker 镜像的进程管理器

作者头像
YaoQi
发布2026-07-10 19:05:20
发布2026-07-10 19:05:20
20
举报

s6-overlay 是一款专为 Docker 容器环境设计的轻量级初始化(init)系统和进程管理工具。它基于 s6 这套 Unix 初始化工具集,旨在解决容器内多进程管理、僵尸进程回收、优雅启停等问题,同时保持容器“单一职责”的理念。

安装非常简单,只需要下载几个tar包,在镜像根路径解压下,然后让/init作为ENTRYPOINT :

代码语言:javascript
复制
FROM ubuntu
ARG S6_OVERLAY_VERSION=3.2.1.0

# 安装启动你想要的主进程
RUN apt-get update && apt-get install -y nginx xz-utils
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
CMD ["/usr/sbin/nginx"]

ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz
ENTRYPOINT ["/init"]

您的 CMD 可以在 Dockerfile 中构建时给出,也可以在命令行上运行时给出,两种方式都可以。它将在 s6 设置的环境中作为正常进程运行;当它失败或退出时,容器将干净利落地关闭并退出。你可以用这种方式运行交互式程序:只有 CMD 会收到你的交互式命令,支持进程不会受到影响。

有两种方式添加更多的守护进程或叫被监督的进程(services supervised)

方法一:(旧方式)

在 /etc/services.d/ 下创建服务名路径,内部有一个写有启动命令的run文件:

例如,创建文件 /etc/services.d/myapp/run

代码语言:javascript
复制
#!/command/execlineb -P
nginx -g "daemon off;"

方法二:(新方式)

可以配置不同的服务类型,比如长期运行的(longrun)、运行一次的(oneshots)、分组(bundle)这种方式允许定义服务间的依赖。

这种方式在路径 /etc/s6-overlay/s6-rc.d/ 中进行配置。

如下是一个示例:

其他一些功能

修复文件属主和权限、容器的初始化脚本、容器的退出脚本等。也分为旧方式和新方式。旧方式是在对应路径写脚本,新方式是在s6-rc.d中配置相关的文件。

提供的日志功能,可以把服务的标准输出定向到指定的日志文件。

还可以通过预定义的环境变量,自定义一些行为。

更多的用法细节详见仓库的README文件:https://github.com/just-containers/s6-overlay

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档