
sc4h/alpine-s6overlaydocker-alpine-s6overlay 是一个基于 Alpine Linux 的轻量级基础镜像,集成了 s6-overlay 进程管理框架。该镜像旨在为容器化应用提供可靠的进程监督、服务生命周期管理和优雅的启动/关闭机制,特别适合需要管理多个进程或依赖特定启动顺序的应用场景。
Alpine Linux 的轻量级特性(小巧的镜像体积、高效的资源占用)与 s6-overlay 的强大进程管理能力相结合,使该镜像成为构建精简且可靠的容器服务的理想基础。
apk),支持快速安装额外依赖。sysvinit 或 systemd。dependencies 配置)、预启动/后停止脚本执行。SIGTERM)后,按优先级逐步终止服务,确保数据一致性。supervisord 等工具。/etc/s6-overlay/s6-rc.d/ 目录下放置服务配置文件,即可定义需管理的服务。通过 Docker 命令直接拉取(需替换 TAG 为具体版本,如 3.18-s6v3.1.5.0):
bashdocker pull gitlab.com/sc4h/docker-alpine-s6overlay:TAG
或在 Dockerfile 中作为基础镜像引用:
dockerfileFROM gitlab.com/sc4h/docker-alpine-s6overlay:TAG
在镜像或容器中,通过以下方式定义 s6-overlay 管理的服务:
/etc/s6-overlay/s6-rc.d/ 目录下创建服务目录(如 my-service)。run:服务启动脚本(必须可执行,退出时服务将被视为停止)。finish(可选):服务停止后执行的清理脚本。dependencies(可选):指定依赖的其他服务(需先启动的服务名称)。示例服务定义(以 nginx 为例):
bash# 创建服务目录 mkdir -p /etc/s6-overlay/s6-rc.d/nginx # 编写 run 脚本(启动 nginx 并保持前台运行) cat > /etc/s6-overlay/s6-rc.d/nginx/run << 'EOF' #!/command/execlineb -P nginx -g "daemon off;" EOF # 添加执行权限 chmod +x /etc/s6-overlay/s6-rc.d/nginx/run
基于 docker-alpine-s6overlay 构建包含应用的自定义镜像:
dockerfileFROM gitlab.com/sc4h/docker-alpine-s6overlay:3.18-s6v3.1.5.0 # 安装应用依赖(如 nginx) RUN apk add --no-cache nginx # 添加服务配置(如上述 nginx 服务定义) COPY ./nginx-service /etc/s6-overlay/s6-rc.d/nginx # 暴露端口(如 nginx 的 80 端口) EXPOSE 80
直接运行基础镜像(需挂载服务配置):
bashdocker run -d \ --name my-service \ -v $(pwd)/my-service:/etc/s6-overlay/s6-rc.d/my-service \ gitlab.com/sc4h/docker-alpine-s6overlay:latest
运行自定义镜像:
bashdocker run -d \ --name my-nginx \ -p 80:80 \ my-custom-nginx-image:latest
s6-overlay 的行为可通过环境变量自定义,常用配置如下:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
S6_KILL_GRACETIME | 发送终止信号后等待进程退出的最大时间(秒)。 | 30 |
S6_CMD_WAIT_FOR_SERVICES_MAXTIME | 等待所有服务启动完成的最大时间(秒)。超时则容器退出。 | 300 |
S6_LOGGING | 日志输出模式:1(仅标准输出)、2(文件+标准输出)、3(仅文件)。 | 1 |
S6_SERVICE_DEPS | 强制指定服务启动依赖关系(覆盖服务目录中的 dependencies 文件)。 | 空 |
以下是使用 docker-compose.yml 部署基于该镜像的多服务应用示例(包含 nginx 和 php-fpm):
yamlversion: '3.8' services: web: build: . # 基于 docker-alpine-s6overlay 构建的自定义镜像 ports: - "80:80" volumes: - ./html:/var/www/html environment: - S6_KILL_GRACETIME=60 # 延长优雅关闭等待时间 - S6_LOGGING=2 # 同时输出日志到文件和标准输出 restart: unless-stopped
/etc/s6-overlay/s6-rc.d/ 下的服务脚本(run、finish)具有可执行权限(chmod +x)。run 脚本必须以前台模式运行进程(如 nginx -g "daemon off;"),否则 s6-overlay 会认为进程已退出并尝试重启。json-file、journald)进行日志收集。3.18-s6v3.1.5.0)而非 latest,确保构建一致性。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务