许多apt-get包的高效Dockerfile

我为我正在构build的应用程序创build了一个Dockerfile,它有很多大的apt-get包依赖关系。 它看起来像这样:

FROM ubuntu:15.10 RUN apt-get update && apt-get install -y \ lots-of-big-packages RUN install_my_code.sh 

在开发我的应用程序时,我不断提出未预料到的软件包依赖关系。 但是,由于所有的软件包都在一个Dockerfile指令中,所以即使再添加一个软件包也会破坏caching,并且需要下载和安装整个软件包,这是永久的。 我想知道是否有更好的方法来构build我的Dockerfile?

一个想法是为每个软件包单独RUN apt-get update && apt-get install -y命令,但是运行apt-get update可能会节省很多时间。

最简单的解决scheme是在第一个之后添加第二个RUN apt-get update && apt-get install -y ,作为所有意料之外的软件包的一个search引擎,但是却以一种不直观的方式分割软件包。 (即“当我意识到我需要它时”),我想我可以在依赖更稳定的时候将它们结合起来,但是我发现我总是过于乐观。

无论如何,如果有人有更好的方式来构build它,我很乐意听到它。 (我的所有其他想法都违背了可重复性的Docker原则)

我认为你需要在Dockerfile中只运行一次apt-get update ,通常在任何其他的apt-get命令之前。

你可以首先安装已知程序的大名单,如果你想出了一个新的程序,那么只需要添加一个新的RUN apt-get install -y abc给你的Dockerfile,让docker继续形成先前的caching命令。 定期(每周一次,每月一次?)你可以重新组织它们,只要你认为合适,或者只是用一个命令来运行所有的东西。

我想我可以在依赖更稳定的时候把它们结合起来,但是我发现我总是过于乐观。

哦,你已经提到了这个解决scheme,无论如何,不​​时做这些“调整”。 只运行一次apt-get update