容器技术
文章平均质量分 76
分享容器知识
东坡爱吃肘子
这个作者很懒,什么都没留下…
展开
-
Tini 源码分析(2)
我会从程序在 main 函数中执行的顺序,来一步一步的分析源码。每一个函数我都会贴上源码,然后进行分析。我把 main 函数的大概流程画了出来,大家可以参考一下。文章太长发不了,只能分割成两章了,这是第二章。原创 2022-11-12 13:39:25 · 446 阅读 · 1 评论 -
Tini 源码分析(1)
Tini 是一个超轻量级的 init 进程管理器,被设计作为容器的 1 号进程。只生成一个子进程(这意味着 Tini 应该运行在容器中),并等待子进程退出收割僵尸进程执行信号转发Tini 只能管理一个进程,容器的最佳实践一般都是一个容器即一个进程,因此 Tini 在容器化场景足够使用了。原创 2022-11-12 13:36:34 · 657 阅读 · 0 评论 -
容器的优雅退出(3):你好,SIGTERM!
可以看到,主进程已经把收到的 SIGTERM 信号发送给了子进程,子进程也显示的是 +++ exited with 0 +++ ,代表已经是被 SIGTERM 关闭的了。Tini是一个很小但是很好用的 容器 init 进程项目,Docker 1.13 及以上的版本已经将这个项目包括进去了,我们可以在 docker run 时,加上 --init 参数,就会使用 tini 作为我们容器的 init 进程了。当然先别急,如果我们把主进程等待子进程的退出时间改成 11 秒的话,会发生什么呢?原创 2022-11-11 11:59:18 · 766 阅读 · 0 评论 -
容器的优雅退出(2):为什么是 SIGKILL?
函数中会判断当前进程是否是当前 pid namespace 中的 1 号进程,如果不是,就直接返回 pid namespace 中的 1 号进程,作为默认的当前进程的所有子进程的新父进程;如果当前既是 1 号进程,而且也没有当前进程的其他线程组,那么就会销毁当前进程的 pid namespace,调用的是。函数会查看本进程有没有子进程,如果没有子进程,就直接退出了,不用找新的父进程了;函数里会通知父进程回收资源,还会告诉所有子进程选取新的父进程,函数如其名:忘记最初的父亲 😄,也就是调用。原创 2022-11-11 11:57:42 · 249 阅读 · 0 评论 -
容器的优雅退出(1):是 SIGKILL 吗?
我们在容器平台上,如果想要停止一个容器,无论是在 Kubernetes 中删除一个 pod,还是用 Docker 来停止一个容器,最后都会使用 Containerd 这个服务。不过不同的是,init 进程收到的是 SIGTERM 信号,而容器内的其他进程收到的则是 SIGKILL 信号。原创 2022-11-11 11:53:50 · 454 阅读 · 0 评论