如何在Docker中安装非发行版软件包而不浪费空间?

时间:2016-08-12 09:36:19

标签: docker

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

相反,如果你有一个你构建的包不是你的发行版存储库的一部分(例如一个独立的.deb.rpm或其他包),你怎么能在Docker容器中安装它这样在安装后包文件本身不会保留在容器中?

例如,如果您执行以下操作:

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

然后因为ADDRUN是单独的命令,最终您的最终容器同时包含已安装的包原始.deb文件。这意味着一个100MB的包将使容器膨胀200 + MB,因为你最终得到了两个包的副本 - 安装的内容加上原始文件。

在构建过程中安装卷可以很好地解决问题,但显然这违反了Docker的理念。如果可能的话,我想避免运行额外的服务,所以服务包以便发行版的普通包管理器可以找到它们甚至运行Web服务器,这样容器可以wget文件是我想要避免的任何一个都必须发生在容器本身之外。

0 个答案:

没有答案