当我在Docker容器中运行MySQL时,mysqld运行

时间:2017-05-31 16:24:13

标签: mysql docker-compose

我在docker容器上运行MySQL服务,但是我发现了一些奇怪的东西,我发现mysqld正在我的主机上运行。谁知道怎么会发生这种情况?因为在我看来,我认为Docker容器和PC主机真的是断开连接的,

但是当我在Docker容器中运行MySQL时mysqld运行的原因是什么?

1 个答案:

答案 0 :(得分:0)

这就是容器,更具体地说是命名空间的工作方式。 mysqld在它自己的进程命名空间中运行,你可以在物理上尽可能多地使用mysqld进程,而不会因为其他命名空间(文件系统,网络,pid等)而干扰其他进程。

命名空间允许将容器(及其进程)与主机系统以及其他容器隔离开来。这使容器能够像真正的虚拟环境一样运行。有6个不同的命名空间:

(1)PID命名空间:这允许您在容器内运行进程,其中pid独立于主机内的pid或该主机(或任何主机)上的任何其他容器。这就是为什么你可以在每个容器内部使用PID 1并在主机上再次使用PID。

(2)NET命名空间:允许您拥有完全独立的IP堆栈,即每个容器内的IP地址和公开端口。

(3)Filesystem / MNT命名空间:您可以拥有一个独立的文件系统(/(根)文件系统)和来自主机的安装的范围视图。

(4)UTS命名空间:允许分配独立的主机名&域名,基本上是系统识别所需的任何东西。

(5)IPC名称空间:独立&隔离的进程间通信,即容器内的SysV调用/消息队列。

(6)用户名空间:容器中的root不一定是主机内的root。您可以将容器内的任何用户映射到主机上的任何用户。

如果你拉出mysqld进程的pid,你会发现它的pid与容器内的pid不同(通常是1),但是有相同的进程。