Docker 处理图像而不是 Dockerfile

use*_*180 4 docker

有人可以向我解释一下为什么正常的 Docker 流程​​是从 Dockerfile 构建镜像,然后将其上传到存储库,而不是仅仅将 Dockerfile 移入存储库或从存储库移出?

假设我们有一台开发笔记本电脑和一台带有 Docker 的测试服务器。

如果我们构建镜像,这意味着上传和下载 Dockerfile 中的所有包。有时这可能非常大(例如 PyTorch > 500MB)。

与其在服务器之间传输大型映像文件,不如在本地编译映像以验证其是否有效,但主要是传输小型 Dockerfile 并在服务器上构建映像,这不是有意义吗?

MTC*_*ter 5

这最初是一条评论,但它太长了。它可能不是一个全面的答案,但无论如何可能包含有用的信息。

\n\n
\n\n

通常,Dockerfile 将构成更大构建过程的一部分,并将前一阶段的输出文件复制到最终映像中。如果您想托管 Dockerfile 而不是最终映像,则您\xe2\x80\x99d 还必须托管(通常是临时的)处理后的文件或整个源存储库和构建脚本。

\n\n

后者通常用于开源项目,但为了方便起见,也经常可以使用预构建的 Docker 镜像。

\n\n

解决此问题的一个简洁解决方案是使用多阶段构建(在 Docker CE 17.05 和 EE 17.06 中引入)将整个构建过程写入 Dockerfile 中。但即使在单个 Dockerfile 中以独立于平台的方式描述了完整的构建过程,仍然必须提供完整的源存储库。

\n\n

TL,DR:将 Docker 映像视为常规二进制文件。它\xe2\x80\x99方便下载和安装,无需弄乱源文件。您可以下载 C 应用程序的源代码并使用提供的 Makefile 构建它,但如果您的系统已提供二进制文件,您为什么还要这样做呢?

\n