如何在不使用ADD或COPY指令的情况下将文件添加到Dockerfile中的
为了编译程序,我需要在Docker容器中的一个大的* .zip文件(5GB)的内容. * .zip文件位于我的本地机器上.这样做的策略是:
完成之后,我想删除解压缩的目录和原始的* .zip文件,因为它们不再需要了.问题是COPY(和ADD指令)将添加一个图层,该图像将包含文件program.zip这是有问题的,因为图像将至少是5gb大.有没有办法在不使用COPY或ADD指令的情况下将文件添加到容器? wget将无法正常工作,因为所提及的* .zip文件位于我的本地机器和卷曲文件://localhost/home/user/program.zip -o /tmp/program.zip将无法正常工作. 最佳答案
这不是直接的,但可以通过wget或curl通过python的一点支持来完成. (所有三种工具通常都可以在* nix系统上使用.)
当没有url被赋予时,wget将无法工作
不能在Dockerfile的RUN指令中工作.因此,我们将需要一个wget和curl可以访问和下载program.zip的服务器. 为此,我们设置了一个服务于我们的http请求的小型python服务器.我们将使用python的http.server模块. (你可以使用python或python 3.它可以同时使用.)
python服务器将为所有启动的目录中的所有文件提供服务.因此,您应该确保在映像构建所在的文件目录中确定启动服务器,或创建包含程序的临时目录.为了说明的目的,我们创建一个文件foo.txt,我们稍后将通过我们的Dockerfile中的wget下载:
启动http服务器时,重要的是我们在LAN上指定本地机器的IP地址.此外,我们将打开Port 8000.完成此操作后,我们将看到以下输出:
现在我们构建一个Docker文件来说明它是如何工作的. (我们假设文件foo.txt应该被下载到/ tmp中):
现在我们开始构建
在构建期间,您将在我们的python服务器上看到以下输出:
我们的图像的构建输出将是:
然后,您可以通过从刚构建的映像启动和输入容器来检查它是否真的有效:
然后,您可以在/ tmp中查找foo.txt. 我们现在可以添加任何文件到我们的图像,而不创建一个新的图层.假设你想添加一个大约5 GB的程序,如我们可以做的问题所述:
以这种方式,我们不会留下10克的碎片. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |