我是Docker的新手,我仍在尝试学习概念。
在我的centos机器上,我创建了一个包含C编译可执行文件的测试镜像。基于对docker的理解,我的意图和期望是该镜像只能在centos机器上运行。这是我的docker文件:

FROM centos:7
WORKDIR /opt/MYAPPS
COPY my_hello .
CMD my_hello

该镜像可以在我创建的centos机器上正常运行。
然后,我将此图像推送到我的仓库中,并将其拉到另一台centos机器上,并且工作正常。到现在为止还挺好。

正如我提到的那样,我期望此图像仅限于centos。为了证明这一点,我尝试将其拉至其他操作系统,我的ubuntu和Windows。令我惊讶的是,它对两者都起作用。
显然我缺少了一些东西。我可能不了解docker的概念,或者我使用的是错误的“FROM”镜像。

最佳答案



否:您在镜像中放置的只是可执行文件运行所依赖的内容,但最后,所有内容都解析为系统调用。

这意味着您的镜像受主机内核的限制,因为正在运行的进程正在对该内核进行系统调用。
(如“The Fascinating World of Linux System Calls”所示)

docker - 如何创建仅在centos上运行的docker centos镜像-LMLPHP

只要内核(这里是Linux,甚至是Windows,通过HyperV)支持您的系统调用,程序就可以在这些主机上运行。
在“How can Docker run distros with different kernels?”中查看更多信息。

关于docker - 如何创建仅在centos上运行的docker centos镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53133269/

10-16 22:35