Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 为什么对netcore应用程序使用多阶段构建?_Docker_Asp.net Core - Fatal编程技术网

Docker 为什么对netcore应用程序使用多阶段构建?

Docker 为什么对netcore应用程序使用多阶段构建?,docker,asp.net-core,Docker,Asp.net Core,默认情况下,dotnet核心项目创建一个多阶段构建Dockerfile,其中应用程序的源代码被复制到临时容器中,在那里构建和发布,然后作为最终映像复制到较小的运行时容器中 我以这种方式构建了一个映像,然后使用了一个简单得多的Dockerfile,其中我只提取了aspnetcore运行时映像,然后从我的开发机器复制到已经发布的应用程序中。这产生了一个我可以在Docker桌面上运行的图像。两幅图像的大小完全相同 直接复制Docker文件比多阶段构建文件简单得多,并且无需我跳过某些限制,以便中间Doc

默认情况下,dotnet核心项目创建一个多阶段构建Dockerfile,其中应用程序的源代码被复制到临时容器中,在那里构建和发布,然后作为最终映像复制到较小的运行时容器中

我以这种方式构建了一个映像,然后使用了一个简单得多的Dockerfile,其中我只提取了aspnetcore运行时映像,然后从我的开发机器复制到已经发布的应用程序中。这产生了一个我可以在Docker桌面上运行的图像。两幅图像的大小完全相同

直接复制Docker文件比多阶段构建文件简单得多,并且无需我跳过某些限制,以便中间Docker容器中的构建能够看到一些需要拉入的自定义资源


为什么使用多阶段构建而不是简单地复制运行时文件夹中已发布的应用程序?是否存在生成的映像无法正确运行的情况?

主要原因是在持续集成模式下开发,请考虑从GitHub或DevOps构建应用程序,您必须自动化整个过程。@Max:即使在CI模式下,您也可以在CI框而不是容器中构建。事实上,我在前面的一个问题中发现,有人回去构建本地和单阶段集装箱化,因为它更适合CI/CD。本地自动化构建同样容易。此外,文档中从未将CI的易用性作为多阶段的原因;它始终与容器大小有关。如果您保留内置的
docker
,则您可以承担丢失构建服务器或迁移到安装了
docker
的任何其他服务器的费用。主要原因是为了在持续集成模式下开发,请考虑从GitHub或DevOps构建应用程序,您必须自动完成整个过程。@Max:即使在CI模式下,您也可以在CI框而不是容器中生成。事实上,我在前面的一个问题中发现,有人回去构建本地和单阶段集装箱化,因为它更适合CI/CD。本地自动化构建同样容易。此外,文档中从未将CI的易用性作为多阶段的原因;它始终与容器大小有关。如果您将内部版本保留在
docker
中,则您可以承担丢失内部版本服务器或迁移到安装了
docker
的任何其他服务器的费用。