在 Docker 'From Scratch' 中哪个操作系统将运行



在docker hello world的例子中,基本映像是Scratch,所以如果我没有提到基本映像中的任何操作系统,命令将在哪里执行。它会在主机操作系统(我的操作系统是mac(中执行吗它会在docker软件中执行吗将在内部创建任何操作系统

如果它在主机操作系统中执行,那么我会写mac命令(我的主机操作系统是mac(,现在如果我把这个图像给某个他的操作系统是windows,它会运行吗?

术语"操作系统"有点过载。

Docker容器始终在Linux内核上运行(本地Windows容器除外(。在非Linux系统(,例如,Mac(上有一个Linux虚拟机,容器总是在该虚拟机上运行。所有容器共享"主机"或VM内核(默认情况下,禁止进行会影响整个系统的更改(。

"操作系统"也可能意味着在内核之上运行的一堆库、实用程序和程序。Docker可以让你运行Ubuntu用户空间,或者Alpine用户空间,或其他一些用户空间。。。或者根本没有用户空间。它们之间可能存在一些小的不兼容(如果你在GNUlibc中使用了一些特定的东西;如果你认为/bin/sh总是GNUbash;…(

你通常不想要FROM scratch。除了Docker为您提供的/proc/dev等几个位之外,您什么都得不到。例如,你不会得到一个外壳。如果您有一个静态链接的Linux二进制文件,并且出于任何原因想要将其封装在容器中(您的应用程序通常必须用C、C++或Go编写,并且您需要采取特殊步骤来静态链接它(,那么它是最有用的。

Docker永远不会导致命令在主机上运行(尤其是在涉及VM层的情况下(,如果你的程序的主要目标是与主机程序交互或读写主机文件,那么你肯定不想要Docker提供的隔离。不同的包装系统可能更适合您。

scratch映像用作二进制可执行文件的"容器"。在hello世界的例子中,

FROM scratch
COPY hello /
CMD ["/hello"]

hello是一个可执行文件,使用gcc构建。

因此,如果你打算使用scratch,你必须编译你的代码,架构取决于你想在哪里启动它。例如,在现代电脑上,它将是amd64,在树莓派上,它是arm*。

报价:https://docs.docker.com/develop/develop-images/baseimages/#create-一种简单的父图像单阶

注意:因为Docker for Mac和Docker for Windows使用Linux虚拟机,您需要Linux二进制文件,而不是Mac或Windows二进制文件。

回到您的问题,对于mac窗口和linux,Docker将像在linux中一样执行二进制文件。您不能将任何mac命令与scratch一起使用,因为它应该是内部的可执行文件。

最新更新