&引用;“docker容器创建”;加上;“什么都没有”;在…内Ie:一个空/空/空/刮擦容器

&引用;“docker容器创建”;加上;“什么都没有”;在…内Ie:一个空/空/空/刮擦容器,docker,docker-volume,minimum-size,scratch-file,Docker,Docker Volume,Minimum Size,Scratch File,创建一个没有任何内容的容器可能会有所帮助。没什么就没什么 用例 在这个答案中,创建了一个容器,而没有启动它,只是为了实例化一个卷并将内容复制到该卷中。然后取下容器 该示例实例化了一个busybox。然而,从未使用过busybox内容。所以我用helloworld对它进行了测试,它也可以工作,因此从1.22MB减少到13.3kB 目前,拉“划痕”失败: 所以问题: 如何创建一个容器,其中包含一个“没有”的图像 我的意思是类似于docker create hello world,但不包含hello

创建一个没有任何内容的容器可能会有所帮助。没什么就没什么

用例 在这个答案中,创建了一个容器,而没有启动它,只是为了实例化一个卷并将内容复制到该卷中。然后取下容器

该示例实例化了一个
busybox
。然而,从未使用过
busybox
内容。所以我用
helloworld
对它进行了测试,它也可以工作,因此从1.22MB减少到13.3kB

目前,拉“划痕”失败:

所以问题: 如何创建一个容器,其中包含一个“没有”的图像


我的意思是类似于docker create hello world,但不包含
hello world
二进制文件。

容器是从图像定义的,包括在容器内运行的命令。只是
scratch
的容器没有要运行的命令,因此不是正确定义的容器。您可以构建的映像只不过是:

FROM scratch

但是,您将很快用完与生成的图像相关的内容。如果需要管理命名卷,则该卷将附加到容器,该容器将使用映像,因此直接使用该映像是最简单的。

问题是,我们只希望团队a使用预填充的只读数据“准备”一些卷,这样当团队B运行其容器时,他们就可以在其中保存数据。Team-A无权访问Team-B的映像。我们不想污染主机文件系统。因此,最好的方法是“准备”卷,就像任何人准备“带信息的硬盘”一样,而不必使用最后一台PC。这就是为什么我们需要“一种机制”来预填充卷。关于没有命令,正如我在问题中所说的,这就是问题的关键:它将是一个永远不会超过
创建状态的容器,并且永远不会开始运行。我需要一扇永远不会打开的门的钥匙吗?同样的方法:对于一个永远不会运行的图像,我需要一个ENTRYPOINT或CMD吗?只是创建了一个图像,但没有运行?另一方面,你说“你可以从头开始构建一个图像”,这句话是不正确的:如果你这样做,构建者会说:“没有生成图像。你的Dockerfile是空的吗?”这就是问题的原因:什么是可创建的“最低限度”图像?为什么“scratch”在旧版本的docker中创建了一个层,而在新版本中没有创建层?@XaviMontero我只使用buildkit进行了测试,buildkit确实创建了一个scratch映像。您可以在图像中添加标签,以避免在classic builder中出现此错误。但总的来说,这感觉像是一个过早的优化。您可以创建一个具有卷初始化步骤的映像,这些步骤可能只有几个兆,然后在完成后删除该映像。为了安装docker引擎,您已经下载了很多其他文件。
FROM scratch