如何在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
然后,因为ADD
和RUN
是分开的命令,所以最终的容器同时具有已安装的软件包和原始的.deb
文件。 这意味着一个100MB的包将使容器膨胀200 + MB,因为你最终得到两个包 – 安装的内容和原始文件。
在构build过程中安装一个卷将很好地解决问题,但显然这是违反Docker理念的。 如果可能的话,我想避免运行额外的服务,所以提供这些包使得发行版的普通包pipe理器可以find它们,甚至运行一个web服务器,这样容器可以获得这个文件是我想避免的,如果它有任何发生在容器本身之外。