如何创建仅在centos上运行的docker centos映像

时间:2018-11-03 16:26:35

标签: docker

我是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”映像。

1 个答案:

答案 0 :(得分:1)

  

正如我提到的那样,我期望此图像仅限于centos。

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

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

https://478h5m1yrfsa3bbe262u7muv-wpengine.netdna-ssl.com/wp-content/uploads/2015/12/image002.png

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