在Docker中使用PID隔离可以让不同容器的进程ID不会相互干扰,确保容器的隔离性。在容器启动时,Docker引擎会创建新的命名空间,并且在该命名空间中运行容器中的第一个进程(通常是init)。
$ docker run --pid=host ubuntu:latest ps
当我们指定PID隔离时,Docker会在新的命名空间中运行容器进程。默认情况下,这个PID命名空间是隔离的,也就是说,容器中的进程只能看到容器内部的进程。
比如,在容器内部运行ps命令,只会看到容器内部的进程:
$ docker run --pid=container:ubuntu:latest ps
但是,在容器外运行ps命令,只能看到容器内部init进程的PID:
$ ps -ef | grep
这个特性可以帮助我们限制容器内部进程的运行环境,让容器更加安全。