四、容器的命名空间:解决冲突的方式一

2020-04-17  本文已影响0人  Judy警官

1.几种常见的冲突

容器之间是共享系统内核的,所以很容易产生冲突,下面是一些常见问题的冲突:

2.解决冲突

那么docker是如何解决这些冲突的呢?

Docker通过Linux的命名空间、根文件系统和虚拟网络组件等工具解决了这些软件冲突,所有这些工具都用来为每个容器提供隔离。这里我们先说命名空间,后续再学习根文件系统和虚拟网络组件。

Docker为每个容器创建一个PID命名空间

Linux为每个运行的进程都生成一个进程标识符,即PID。Linux提供了工具可以创建多个PID命名空间,每个空间都有自己的一套PID。docker为每个容器创建了一个命名空间。不同命名空间的PID可能相同,但不影响程序的运行。下面就通过命令观察一下不同容器内的PID情况,使用docker exec命令在运行的容器中运行额外的进程。ps命令可以显示出容器内的所有进程。

docker exec mailer ps
docker exec agent ps

结果如下:


image.png

可以看到,mailer和agent都有一个PID=1的进程,通常编号1的PID进程是init系统进程。虽然PID相同,但是两个进程互不影响,因为它们在不同的命名空间中。想象一下,如果没有PID命名空间,多个容器和宿主机共用一套PID,就需要在容器之间做大量的信息同步工作,非常麻烦。

上一篇下一篇

猜你喜欢

热点阅读