Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
isno committed May 22, 2024
2 parents 1ed3616 + 02fc7c2 commit ee0a905
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion container/orchestration.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ $ pstree -g
如果是使用 Docker,自然会想到启动一个 Docker 容器,里面运行两个进程:rsyslogd 执行业务、imklog 处理业务日志。可是这样设计会有一个问题:**容器里面 PID=1 的进程该是谁**?这个问题的核心在于 **Docker 容器的设计本身是一种“单进程”模型**,Docker 只能通过监视 PID 为 1 的进程的运行状态来判断容器的工作状态是否正常(即由 ENTRYPOINT 启动的进程)。

:::tip 额外知识
在 Linux 系统中,PID 为 1 的进程是 init,它是所有其他进程的祖先进程。它不断地检查进程状态,一旦某个子进程因为父进程错误成为孤儿进程,init 就会回收这个子进程。所以,实现的容器中,启动的第一个进程也需要实现类似 init 功能,处理 SIGTERM\SIGINT 等信号,优雅地结束容器内的进程。
在 Linux 系统中,PID 为 1 的进程是 init,它是所有其他进程的祖先进程。它不断地检查进程状态,一旦某个子进程因为父进程错误提前退出而成为孤儿进程,init 就会收养这个子进程。所以,实现的容器中,启动的第一个进程也需要实现类似 init 功能,处理 SIGTERM\SIGINT 等信号,优雅地结束容器内的进程。

因此,如果确实需要在一个 Docker 容器中运行多个进程,最先启动的命令进程应该具有资源监控和回收等管理能力,譬如针对容器开发的 tinit。
:::
Expand Down

0 comments on commit ee0a905

Please sign in to comment.