dumb-init:一个Docker容器初始化系统

2016 年 1 月 08 日

容器化环境中,往往直接运行应用程序,而缺少初始化系统(如 systemd、sysvinit 等)。这可能需要应用程序来处理系统信号,接管子进程,进而导致容器无法停止、产生僵尸进程等问题。

Yelp 开发的 dumb-init ,旨在模拟初始化系统功能,避免上述问题的发生。

问题的根源

对于开发人员来说,希望在容器中运行的进程和普通进程行为一致,这样才能大大降低容器化迁移的成本,而无须让开发人员关注容器初始化和退出的流程。

归功于 Linux 的名字空间(namespace),从容器中看,由容器创建的第一个进程 pid 为 1。而对于 Linux 来说,pid 为 1 的进程,有着特殊的使命:

  1. 传递信号,确保子进程完全退出
  2. 等待子进程退出

子进程的优雅退出

对于第一点,如果 pid 为 1 的进程,无法向其子进程传递信号,可能导致容器发送 SIGTERM 信号之后,父进程等待子进程退出。此时,如果父进程不能将信号传递到子进程,则整个容器就将无法正常退出,除非向父进程发送 SIGKILL 信号,使其强行退出。

考虑如下进程树:

  • bash(PID 1)
    • app(PID2)

bash 进程在接受到 SIGTERM 信号的时候,不会向 app 进程传递这个信号,这会导致 app 进程仍然不会退出。对于传统 Linux 系统(bash 进程 PID 不为 1),在 bash 进程退出之后,app 进程的父进程会被 init 进程(PID 为 1)接管,成为其父进程。但是在容器环境中,这样的行为会使 app 进程失去父进程,因此 bash 进程不会退出。

原文链接:【 https://www.infoq.cn/article/2016/01/dumb-init-Docker 】。未经作者许可,禁止转载。

登录后可解锁全站优质内容

免费畅享技术公开课、顶尖技术团队访谈、一线互联网大厂技术实践

文章
视频
电子书
研究报告
立即登录
2016 年 1 月 08 日 18:00 23576

评论

发布
暂无评论
发现更多内容

Mysql探索之索引详解

不才陈某

MySQL

【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!

liuzhihang

Java elasticsearch 搜索 ES Lucene Elastic Search

求索十五载:百度地图绘就的时代浪漫

脑极体

linux入门系列16--文件共享之Samba和NFS

黑马腾云

Linux centos linux运维 Samba NFS

linux入门系列18--Web服务之Apache服务2

黑马腾云

Apache Linux centos linux运维

区块链技术发展面临七大关键挑战以及未来的五大展望

CECBC区块链专委会

区块链 新基建 数字型资产

第 0 期架构师训练营第 5 周作业 2-总结

天上星亮晶晶

第 0 期架构师训练营第 6 周作业1

天上星亮晶晶

linux入门系列18--Web服务之Apache服务1

黑马腾云

Linux centos apche linux运营 centos网站部署

初识Druid——实时OLAP系统

justskinny

大数据处理 大数据技术 Apache Druid

菜市场和房屋中介

escray

面试 学习笔记 面试现场

安全系列之——数据传输的完整性、私密性、源认证、不可否认性

诸葛小猿

加密解密 rsa 签名验签 数字证书 CA

增量了两个私有网络之后的对比

孙朝辉🐢

linux入门系列17--邮件系统之Postfix和Dovecot

黑马腾云

Linux centos Dovecot Postfix 邮件系统

LeetCode题解:155. 最小栈,单个栈+对象存储,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

第 0 期架构师训练营第 6 周作业2-总结

天上星亮晶晶

linux入门系列20--Web服务之LNMP架构实战

黑马腾云

php MySQL Linux centos ngnix

一篇文章搞懂前端学习方法与构建知识体系

三钻

前端 学习法

区块链技术服务于税收治理的深圳实践

CECBC区块链专委会

区块链 电子发票 税收

如何开成功一个回顾会

技术管理Jo

敏捷教练 回顾会 引导者

年薪80万难觅技术人才 杭州区块链人才需求旺盛

CECBC区块链专委会

区块链 新基建 大学专业

避免栽坑之掌握Jenkins工作原理

清菡

jenkins

当“基本功”数据结构与算法被图形分解,要还不会就真的没办法了

周老师

Java 编程 程序员 架构 面试

Luajit字节码解析之KNUM

whosemario

lua

800页PPT搞懂阿里技术及生态全貌,“未入阿里,知根知底”

周老师

Java 编程 程序员 架构 面试

穿什么衣服去面试?

escray

面试 学习笔记 面试现场

揭开数组的真面目

Java旅途

Java 数据结构 数组

并发杂谈系列0 序与目录

八苦-瞿昙

随笔杂谈

第 0 期架构师训练营第5 周作业1

天上星亮晶晶

linux入门系列19--数据库管理系统(DBMS)之MariaDB

黑马腾云

MySQL Linux centos linux运维 MariaDB

视频AI第一步-动作识别数据集

flow

dumb-init:一个Docker容器初始化系统-InfoQ