如何分割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*
其实,我是
- 下载一些第三方安装包
- 开箱
- 运行安装
- 删除安装文件
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 ...
这样,你将只在图像中有一层,只复制安装。