来自文件的 Docker 多阶段复制路径列表



我有一个基本映像(mybase:1.0.0(,可以成功构建和安装一些CMake项目。 我想制作一个更专业的映像(myapp:1.0.0(,它由mybase:1.0.0组成,并添加我的应用程序,这取决于mybase:1.0.0中安装的库和二进制文件。 每个 CMake 生成都会创建install_manifest.txt,该具有指向每个二进制文件或库的安装路径>

示例清单:

/usr/local/bin/myapp
/usr/local/lib/mylib.so

在我的专业映像中,我想将这些路径复制到我的新容器中,该容器不应基于 mybase:1.0.0,而是另一个专用(且兼容(映像(在我的示例中为 nvidia/cuda:10.2-base-ubuntu18.04(。 为此,我会让我的 dockerfile 如下所示:

FROM nvidia/cuda:10.2-base-ubuntu18.04
COPY --from mybase:1.0.0 /usr/local/bin/myapp /usr/local/bin/myapp
COPY --from mybase:1.0.0 /usr/local/lib/mylib.so /usr/local/lib/mylib.so

我的问题是有很多(~200(文件需要安装,将它们全部包含在dockerfile中会非常丑陋,当库更新并再次构建基本映像时,dockerfile需要更新。

一种解决方案是将所有文件从构建目录直接复制到/usr/local/bin 和/usr/local/lib。但是为了显著减小文件大小,在基本映像安装构建目录后,会删除它们(除了清单((这是一项要求(。 解决此问题的方法是使用第二个"pre-base"映像,该映像在构建后删除已安装的映像(构建库具有相互依赖关系,需要安装它们(。

有没有办法执行 COPY - 从清单的内容.txt指定 SRC 路径? 或者我可以使用任何类似的做法?

我请求了一个功能请求来这样做,我收到了关于如何使用docker实验API执行此操作的回复。

请参阅:https://github.com/docker/for-linux/issues/1060#issuecomment-655566235

最新更新