这基本上是关于如何包含Docker构建上下文之外的文件的后续问题:我在我所有的项目中都使用了大文件(几GB),这些文件保存在一个外部驱动器上,仅用于开发。
我想在构建docker容器时复制
或将这些文件添加到docker容器中。上面链接的答案允许用户指定Dockerfile的不同路径,这可能会扩展构建上下文。我觉得这不现实,因为这需要将构建上下文设置为system root(?),能够包含单个文件。
长话短说:是否有任何方法或解决方法来包含远离docker构建上下文的文件?
复制命令获取源和目标值,只需将硬盘挂载点的完全绝对路径指定为src目录
COPY/absolute_path/to/hard drive/container/path
我认为您担心的主要问题是,在docker daemon构建映像时,您不希望将目录中的所有文件发送到docker daemon。当目录太大(以GBss为单位)时,构建映像需要很多时间。
如果要求在docker内部构建任何内容时只使用这些文件,那么可以将它们装载到容器中。
一种棘手的方式
>
运行一个带有基本映像的容器,并在其中装入目录<代码>docker run-d-v本地路径:容器路径
进入容器docker exec-itCONTAINER_IDbash
运行构建步骤/建造一些东西。sh
从正在运行的容器创建图像docker commit container_ID
标记图像docker标签IMAGE_ID标签: v1
。您可以从以前的命令中获取图像ID
从长远来看,这种方法可能看起来很乏味,但如果你想构建1到2次图像,你可以尝试这种方法。
我尝试了我的一个docker映像,因为我想避免在映像构建期间将大量文件发送到docker守护程序
关于你可以尝试的三点建议:
是否包含一个远离docker构建上下文的文件?
您可以通过将主机上的cp
(或tar
)文件构建到专用目录树中来构建自己的构建上下文。您不必使用实际的源代码树或构建树。
rm -rf docker-build
mkdir docker-build
cp -a Dockerfile build/the-binary docker-build
cp -a /mnt/external/support docker-build
docker build ./docker-build
# reads docker-build/Dockerfile, and the files in the
# docker-build directory, but nothing else; only sends
# the docker-build directory to Docker as the build context
大文件[...](几GB)
Docker不能很好地处理这么大的构建上下文。在过去,我至少看到,docker build
在将构建上下文发送到自身的步骤上花费了很长时间,而docker push
和docker pull
在尝试发送千兆字节层时存在网络问题。
这有点过时,稍微打破了“自包含映像”模型,但是您可以将这些文件作为Docker绑定挂载提供,而不是将它们包含在映像中。您的应用程序需要知道如果数据不存在该怎么办。当您部署应用程序时,您还需要将文件与Docker映像和其他部署构件一起单独分发。
docker run \
-v /mnt/external/support:/app/support
...
the-image-without-the-support-files
只用于开发
在开发的这个阶段,你可能根本不用Docker。使用本地源代码树和本地开发工具;根据需要对这些大型测试装置运行单元测试。只有在即将运行提交前集成测试时,才能构建Docker映像;这可能在开发周期中已经足够晚了,所以您不需要这些文件。
问题内容: 如何使用Docker文件中的“ ADD”命令从Docker构建上下文之外包含文件? 从Docker文档中: 路径必须在构建上下文内;您不能添加../something/something,因为Docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。 我不想为了适应Docker而重组我的整个项目。我想将所有Docker文件保留在同一子目录中。 此外,似乎Docker
路径必须在生成的上下文中;您不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。 我不想重组我的整个项目只是为了在这件事上容纳Docker。我想把我所有的Docker文件都保存在同一个子目录中。 此外,Docker似乎还不支持(可能永远也不支持)符号链接:Dockerfile ADD命令不跟随主机#1676上的符号
我有以下文件夹结构: 我有我的micro-hr文件夹,其中是我的主包,我有一个本地lib,它是rabbitmq 这是我的dockerfile: docker撰写: 这是我的包裹。我的主包后端/微hr上的json: 我不知道我错在哪里,基本上我在我的主包中使用npm链接链接到我的lib,并尝试在docker中创建文件夹,但无济于事。 docker构建错误: 步骤6/10:复制/rabbitmq/包。
问题内容: 我怎么能包括为没有MANIFEST.in文件? 我的setup.py看起来像这样: 版本: 我就是无法加入。 还是此博客文章仍然正确? http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging- documentation-on– package_data-/ 不过,在过去的一个小时中,我了解到这
问题内容: 我已经将非Java文件存储在一个包中。我想从此包中读取文件,而不指定文件的绝对路径(例如C:\ etc \ etc …)。我应该怎么做? 问题答案: 使用getResourceAsStream 例如: 如果在同一包中将打开 也: 将打开包装 祝好运!:)
在C语言中,我可以用和调用来创建新文件,当且仅当当前没有同名文件时。我还没能在哈斯克尔找到这样做的方法。我更喜欢提供的友好的东西,最好是为我完成所有棘手的异常处理。(我不一定期望它能正确地为我完成,但那是另一回事。)