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

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

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

相关文章

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

    1.几种常见的冲突 容器之间是共享系统内核的,所以很容易产生冲突,下面是一些常见问题的冲突: 两个程序想要绑定到相...

  • C++入门05 --命名空间,继承,访问权限,初始化列表

    命名空间 命名空间主要是用来解决命名冲突的; namespace xxxx { }:命名空间的定义; 利用::域运...

  • ESModule

    模块化解决的问题 命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • esmodule规范

    模块化解决的问题:命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • C++之命名空间

    命名空间的核心目的:解决命名冲突 命名空间的内容可以是 符号常量、变量、函数、结构、枚举、类和对象等等。 创建一个...

  • 《Effective Objective-C 2.0 》 阅读笔

    第15条:用前缀避免命名空间冲突 命名冲突 由于Objective-C没有命名空间机制,所以如果发生命名冲突,那么...

  • nsenter命令

    作用: 进入其他linux命名空间执行操作。如从主机进入容器的命名空间,或者从容器进入主机的命名空间。一般情况下,...

  • 给网络命名空间增加或删除网卡(容器通用)

    上次学习了网络命名空间,那么如何进入容器的命名空间呢? 运行的容器都对应一个PID,每个PID都有自己的命名空间。...

  • 2018-04-22 PHP命名空间

    解决名字冲突问题使名字更加简单清晰 通过namespace关键字建立 命名空间必须建立在程序开头 命名空间之前不能...

  • PHP命名空间及命名空间与文件路径的关系

    1、命名空间的引入原因 命名空间的引入是为了解决变量或者函数的名字冲突; 举个例子来说, 对于文件A.php 、B...

网友评论

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

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