如何在Docker中安装非Distro包而不浪费空间?

在Docker中,您可以按照正常的方式安装软件包,例如apt-get install xyz for Debian。 这只会导致容器中出现一个包的副本(安装的副本)。

相反,如果你有一个你不是发行版的仓库(例如独立的.deb.rpm或其他包)的软件包,你怎么能在Docker容器中安装这个软件包,使得软件包文件本身没有安装后留在容器中?

例如,如果你做这样的事情:

 ADD example.deb /home RUN dpkg -i /home/example.deb && rm /home/example.deb 

然后,因为ADDRUN是分开的命令,所以最终的容器同时具有已安装的软件包原始的.deb文件。 这意味着一个100MB的包将使容器膨胀200 + MB,因为你最终得到两个包 – 安装的内容和原始文件。

在构build过程中安装一个卷将很好地解决问题,但显然这是违反Docker理念的。 如果可能的话,我想避免运行额外的服务,所以提供这些包使得发行版的普通包pipe理器可以find它们,甚至运行一个web服务器,这样容器可以获得这个文件是我想避免的,如果它有任何发生在容器本身之外。