当前位置: 首页 > 面试题库 >

Dockerfile中的命令数

龚浩宕
2023-03-14
问题内容

我注意到Dockerfile中的每一行都会创建一个单独的映像。创建的图像数量是否有限制?

我们是否应该尝试做一个单一的RUN cmd1 && cmd2 && cmd3替代方案?

如果我们使用Quay这样的服务,这会有什么不同?

谢谢!


问题答案:

正如Alister所说,如果您使用AUFS文件系统,则Docker映像中的层数是有上限的。
在Docker 0.7.2版本中,限制增加到了127层(
changelog
)。

由于这是对底层联合文件系统的限制(对于AUFS),因此使用Quay或其他私有注册表不会改变结果。但是您可以使用其他文件系统。

当前将使用替代文件系统devicemapper(请参阅CLIdocs)。这些其他文件系统在层数上可能有不同的限制-我认为devicemapper没有上限。

没错,通过在单个RUN语句中运行多个命令,可以减少层数。

或者,如果您确实需要很多层来构建映像,则可以构建映像,直到达到最大值为止,然后使用它docker export来创建映像文件系统的未分层副本。然后dockerimport再次将其重新转换为图像,这次只有一层,然后继续构建。您会以这种方式失去历史。



 类似资料:
  • 问题内容: 我正在尝试使用带有适当命令的命令自动创建开发Docker映像。我需要在命令中运行的脚本之一希望用户单击以阅读其许可协议。因此,有两个问题: ?中所有命令的输出在哪里? 可以与上述命令进行交互的解决方案是什么?现在,命令陷入僵局,要求用户无限循环输入。 问题答案: 在构建过程中,命令的输出显示在您的终端中。Docker构建过程是完全非交互的,因此您必须找到某种方式来自动接受这些条款(几乎

  • 我试图使用命令和适当的自动创建开发Docker映像。我需要在命令中运行的一个脚本希望用户单击并阅读他们的许可协议。因此有两个问题: 中所有 命令的输出在哪里? 有什么解决方案可以与上述命令交互?现在,命令只能在无限循环中向用户请求输入。

  • 问题内容: 用于Docker的Visual Studio工具为ASP.NET项目创建一个包含以下命令的Dockerfile : 根据我的阅读,参数是相对于上下文的,因此不受命令的影响。该然而,相对于如此将在被人指指点点。 该命令是否只是从根目录移出其余文件进行打包(docker-compose.yml,.dockerignore等)?如果是这样,那为什么要在命令之前完成呢? 完整的Dockerfi

  • 问题内容: 我有以下内容: 当我使用以下命令构建并运行此映像时: 我收到以下错误: 但是,当我像这样运行图像时,它可以工作: 那么,为什么这样做呢?为何其他一个不起作用? 问题答案: 您使用了错误的引号。它应该是:

  • 问题内容: Dockerfile中的和命令之间有什么区别,何时可以在另一个之上使用? COPY指令将从以下位置复制新文件并将其添加到容器的文件系统中: ADD指令将从中复制新文件并将其添加到位于path的容器的文件系统中。 问题答案: 您应该查看和文档以获取有关其行为的更详细描述,但简而言之,主要区别在于可以做的还不止: 允许成为网址 参考下面的评论, 文档指出: 如果是以公认的压缩格式(身份,g

  • Dockerfile中的和命令之间有什么区别?什么时候我会使用一个命令而不是另一个命令? COPY指令将从复制新文件,并将它们添加到路径的容器文件系统中 ADD指令将从复制新文件,并将它们添加到路径的容器文件系统中。