美文网首页
四、容器的命名空间:解决冲突的方式一

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

作者: Judy警官 | 来源:发表于2020-04-17 09:46 被阅读0次

    1.几种常见的冲突

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

    • 两个程序想要绑定到相同的网络端口。
    • 两个程序都使用相同的临时文件名和文件锁。
    • 两个程序想要使用不同版本且全局已安装的库。
    • 同一程序的两个副本要使用相同的PID文件。
    • 第二个安装的程序修改了另一个程序正在使用的环境变量,导致第一个程序中断。

    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,就需要在容器之间做大量的信息同步工作,非常麻烦。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/gzlhvhtx.html