当前位置:文档之家› 进程管理实验报告

进程管理实验报告

进程管理实验报告
进程管理实验报告

进程管理实验报告

容器通过使用namespace实现了容器间的进程隔离,那么在容器主机上,如何高效的对这些容器内进程进行监控和管理,无论对于运维还是安全,都有着重要的意义。

二、PID命名空间

Linux内核为所有的PID命名空间维护了一个树状的数据结构,最顶层是系统初始化时创建的root namespace(根命名空间),父节点可以看到子节点中的进程,并可以通过信号等方式对子节点中的进程产生影响。反过来,子节点不能看到父节点名空间中的任何内容,也不能通过kill或ptrace影响父节点或其它名空间中的进程。

在Docker中有一个很特殊的进程——Pid为1的进程,这也是Docker的主进程,通过Dockerfile中的ENTRYPOINT或CMD指令指定。当主进程退出的时候,容器所拥有的PID命名空间就会被销毁,容器的生命周期也会结束。

Docker最佳实践建议的是一个容器一个Service,并不强制要你一个容器一个线程。有的服务,会催生更多的子进程,比如Apache。

Pid=1进程需要对自己创建的子进程负责,当主进程没有设计好,不

能优雅地让子进程退出,就会造成很多问题,比如数据库容器,如果处理数据的进程没有优雅地退出,可能会造成数据丢失。

三、Docker架构

下图是Docker官方[1]给出的架构图。Docker使用Client-Server 架构,Docker Client与Docker Daemon进行通信。Docker Daemon(dockerd)监听Docker API请求并管理Docker的对象,如镜像、容器、网络和存储卷等。

图1 Docker架构

下面在Linux(Ubuntu 16.04.6 LTS)上使用apt-get install docker-ce安装Docker(19.03.4),具体版本信息如下所示。

root@test:~# docker version

Client: Docker Engine - Community

Version: 19.03.4

API version: 1.40

Go version: go1.12.10

Git commit: 9013bf583a

Built: Fri Oct 18 15:53:51 2019

OS/Arch: linux/amd64 Experimental: false

Server: Docker Engine - Community

Engine:

Version: 19.03.4

API version: 1.40 (minimum version 1.12) Go version: go1.12.10

Git commit: 9013bf583a

Built: Fri Oct 18 15:52:23 2019 OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.2.10

GitCommit:

b34a5c8af56e510852c35414db4c1f4fa6172339 runc:

Version: 1.0.0-rc8+dev

GitCommit:

3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init:

Version: 0.18.0 GitCommit: fec3683

相关主题
文本预览
相关文档 最新文档