我是docker的新手,正在尝试文档中的第一个hello world示例。据我所知,hello-world镜像基于scratch镜像。请问有人可以解释一下scratch镜像的工作原理吗?据我所知,它基本上是空白的。那么在hello-world镜像中如何执行二进制文件呢?
我是docker的新手,正在尝试文档中的第一个hello world示例。据我所知,hello-world镜像基于scratch镜像。请问有人可以解释一下scratch镜像的工作原理吗?据我所知,它基本上是空白的。那么在hello-world镜像中如何执行二进制文件呢?
scratch
镜像是 Docker 中最基本的镜像。所有其他镜像都是以此为基础祖先。实际上,scratch
镜像是空的,不包含任何文件夹或文件...
scratch
镜像主要用于构建其他基础镜像。例如,debian 镜像就是从 scratch 构建而来的:
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
rootfs.tar.xz文件包含了所有的文件系统文件。Debian镜像将文件系统文件夹添加到空白的scratch镜像中。
我理解scratch镜像是基本上是空白的,那么hello-world镜像是如何执行二进制文件的呢?
scratch镜像是空白的。实际上,添加到scratch镜像中的hello-world可执行文件是静态编译的,这意味着它是自包含的,不需要任何额外的库来执行。
正如Docker官方文档所述:
假设您从Docker GitHub示例C源代码构建了“hello”可执行文件示例,并使用-static标志进行了编译,则可以使用以下命令构建此Docker镜像:docker build --tag hello
这确认了hello-world可执行文件是静态编译的。有关静态编译的更多信息,请阅读这里。