Docker混淆

我对Docker非常感兴趣,并且已经阅读了一些内容,但是我对容器有点困惑。 当我们举例来说,来自docker hub的官方nginx,它只是应用程序还是nginx带有操作系统? 在我看来,所有的容器来与操作系统,因为与dockerexec -it应用程序名称bash我可以进入和更新或安装包。 这个部分让我感到困惑,因为我认为这只是应用程序,没有别的。

谢谢你,sfm1977

取决于 。 大多数软件需要操作系统的某些部分才能运行(可以是一些库或实用程序); 在这些情况下,使用“基本”操作系统( DebianAlpine作为官方图像),以便应用程序可以运行。 虽然你可以将docker exec放入这样的容器并启动一个bash / shell会话,但是这只能用于debugging; 一般来说,容器( nginx )应该被认为是应用程序的 nginx,而不是一个“安装了nginx的虚拟机”。

有些软件是静态链接的,不需要额外的东西来安装。 例如, hello-world或者traefik图像使用操作系统作为基础,只包含一个二进制文件,没有别的。

这取决于你所说的“操作系统”。 你的意思是kernel spaceuser space – 答案是否定的。 容器只能更改用户空间。

Docker像chroot或lxc一样工作,它使用主机上的单个Linux内核以及容器中的二进制文件/库/ etc等运行,简而言之,容器是单机上的独立命名空间。
所以,如果容器, "environmnet"将改变(“libc”,“shell”,所有这些东西),“OS”永远不会改变。
另外,请查看这篇关于cgroups的wiki文章。
PS:当然,如果你不在Linux上,你需要在Linux上安装VM才能使用Docker。 但这是另一个问题。