如何分割docker层?

我的Dockerfile看起来像

RUN echo "Downloading huge file" && \ wget http://server/huge.tar.gz && \ echo "Extracting huge file" && \ tar xzf huge.tar.gz && \ huge/install /opt/myinstall && \ rm -rf huge* 

其实,我是

  1. 下载一些第三方安装包
  2. 开箱
  3. 运行安装
  4. 删除安装文件

Docker构build成功,我可以使用我的新容器。

问题在我推送到Amazon Containerregistry时开始。

推拒绝,因为最后一层是巨大的(约20G)。

20G是一个真正的安装大小,所以我可以做一些减less它。

我的问题是如何将一个图层拆分为一些较小的图层以适应Amazon图层大小限制?

每个dockerfile指令都会创build一个新图层。 所以解决办法是把RUN命令分成多个RUN命令。 但是,我不确定这个解决scheme是否适用于你的情况,如果焦油非常大,因为其中一层将包含焦油。 尽pipe如此,你应该尝试这种方法。

 RUN wget http://server/huge.tar.gz RUN tar xzf huge.tar.gz RUN huge/install /opt/myinstall && \ RUN rm -rf huge* 

另一种select是使用docker多级构build 。 这个想法是将tar安装在一个单独的容器中,并将安装目录复制到您的容器中:

 FROM ... as installer RUN echo "Downloading huge file" && \ wget http://server/huge.tar.gz && \ echo "Extracting huge file" && \ tar xzf huge.tar.gz && \ huge/install /opt/myinstall && \ rm -rf huge* FROM ... COPY --from=installer /opt/myinstall /opt/myinstall ... 

这样,你将只在图像中有一层,只复制安装。