为什么Docker会调用每台机器Moby?

我注意到,每当我创build一个新的Dockerfile和:

RUN FROM ubuntu:latest或如果我运行以下命令:

docker run -it ubuntu bash然后做:

uname -a ,结果总是如下所示:

Linux 5d0eab7d2f8e 4.9.36-moby #1 SMP Wed Jul 12 15:29:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

不应该的结果是Ubuntu-16.04uname -r ? 为什么说Moby而不是Ubuntu?

Docker容器共享主机OS的内核,所以当你在Ubuntu容器中调用uname -r时,这个命令将返回主机OS内核的信息。

在你的情况下,主机操作系统是MacOS。 由于Docker需要Linux内核并且不能直接使用MacOS内核,因此Docker for Mac将尝试创build一个带有Linux内核(称为Moby Linux)的HyperKit VM来运行容器。 所以在这种情况下, uname -r命令会输出Moby Linux的内核信息。

有关更多详细信息,请检查Docker for Mac文档: https : //docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-for-mac-environment

4.9.36-moby是内核版本。 内核是“主机”和所有容器之间共享的一块。 所以你正在运行一个Ubuntu容器,但内核来自“主机”。

由于你在macOS上,“主机”实际上是由Docker for Mac运行的Linux虚拟机。 该虚拟机运行一个名为moby的内核风格。 我相信你可以在这里了解更多关于这个内核的信息: https : //github.com/linuxkit/linuxkit