理解Docker容器的进程管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解Docker容器的进程管理相关的知识,希望对你有一定的参考价值。

参考技术A 1.在Docker中,进程管理的基础就是Linux内核中的PID命名名空间技术,每个Container都是Docker Daemon的子进程,通过命名空间技术,Docker实现容器间的进程隔离。另外Docker Daemon也会利用PID命名空间的树状结构,实现了对容器中的进程交互、监控和回收。

2.在Docker容器中,PID1进程是启动进程,它也会负责容器内部进程管理的工作。而这也将导致进程管理在Docker容器内部和完整操作系统上的不同。

3.如果在容器中运行多个进程,PID1进程需要有能力接管“孤儿”进程并回收“僵尸”进程--可利用自定义的init进程来进行进程管理,比如 S6 , phusion myinit , dumb-init , tini 等。

4.在Docker中“一个容器一个进程的方式”并非绝对化的要求,然而在一个容器中实现对于多个进程的管理必须考虑更多的细节,比如子进程管理,进程监控等等。所以对于常见的需求,比如日志收集,性能监控,调试程序,我们依然建议采用多个容器组装的方式来实现。

Monit实现Docker容器内多进程管理

Monit和Supervisor还是有很大区别的,Supervisor管理的都是前台执行的进程,Monit既可以管理前台进程也可以管理后台进程,简单的说,在CentOS中使用service xxx start 启动的程序,使用Monit可以直接管理,这就解决了很多没有前台方式启动的程序不能用Supervisor来管理的问题。 Monit本身可以做的事情,远不止管理进程,它还可以监控文件,socket,并定义触发器等等,功能很强,具体的用法,可以参见它的官网。

本篇的重点,就来介绍在容器里面,如果用它来管理多个进程。


以上是关于理解Docker容器的进程管理的主要内容,如果未能解决你的问题,请参考以下文章

Docker - 入门

【容器】关于docker容器中的init进程

Docker容器内多进程管理(草稿)

Docker学习笔记Docker容器相关技术

Docker容器管理总结

容器安全之启用docker客户端命令的授权