以下是我的Dockerfile:-
FROM ubuntu:18.04 AS builder
RUN apt update -y
RUN apt install python3.8 -y && apt install python3-pip -y
RUN apt install build-essential automake pkg-config libtool libffi-dev libgmp-dev -y
RUN apt install libsecp256k1-dev -y
RUN apt install openjdk-8-jre -y
RUN apt install git -y
RUN apt install libkrb5-dev -y
RUN apt install vim -y
RUN mkdir /opt/app
RUN chown -R root:root /opt/app
COPY ["requirements.txt","/opt/app/requirements.txt"]
SHELL ["/bin/bash", "-c"]
WORKDIR /opt/app
RUN pip3 install -r requirements.txt && apt-get -y clean all
RUN mkdir /opt/app/
RUN chown -R root:root /opt/app/
RUN cd /opt/app/
RUN git clone -b master https://bitbucket.org/heroes/test.git
CMD ["bash","/opt/app/bin/connect.sh"]
Docker镜像生成的图像文件大小为1.7G。我需要安装OpenJDK,因此不能使用标准的python软件包作为基本软件包。当我执行docker history时,我可以看到2到3层(安装上面的软件包,如Python3.8,OpenJDK和libsecp256k1-dev),占用的空间为400MB至500MB。 Ubuntu作为基本映像仅占用64 MB,但是其余大小由我的dockerfile层占用。
我相信我需要重写dockerfile来减小我做过的文件大小,但是没有任何具体的事情发生。
[请协助我缩小图像,使其至少小于1 GB。
谢谢
您遇到了多个问题。
首先,每个RUN apt install
都在增加图像大小,应该将它们全部置于同一RUN阶段,并在该阶段结束时删除所有缓存的apt文件。
第二,您正在安装不必要的东西。例如,为什么需要vim
和git
?如果您不构建任何内容,为什么要安装build-essential
和其他与构建相关的内容?
第三,您似乎尝试进行多阶段构建,但最终将所有内容添加到同一图像中。阅读python多阶段构建。
如果我们考虑最佳实践,而不是多个RUN
,请使用单个RUN
。
例如
RUN apt-get update -yq \
&& apt-get install -y python3-dev build-essential -yq \
&& apt-get install curl -yq \
&& pip install -r requirements.txt \
&& apt-get purge -y --auto-remove gcc python3-dev build-essential
如果您在最终映像中不需要git,则可以使用多阶段构建,可以在最终阶段将其删除
如果可能,您也可以使用高山版本。
现在较小:
FROM ubuntu:18.04 AS builder
RUN apt update -y
RUN apt install python3-pip -y
RUN apt install build-essential automake pkg-config libtool libffi-dev libgmp-dev -y
RUN apt install libsecp256k1-dev -y
RUN apt install openjdk-8-jre-headless -y
RUN apt install git -y
RUN apt install libkrb5-dev -y
RUN apt install vim -y
RUN mkdir /opt/app
RUN chown -R root:root /opt/app
COPY ["requirements.txt","/opt/app/requirements.txt"]
SHELL ["/bin/bash", "-c"]
WORKDIR /opt/app
RUN pip3 install -r requirements.txt && apt-get -y clean all
RUN mkdir /opt/app/
RUN chown -R root:root /opt/app/
RUN cd /opt/app/
RUN git clone -b master https://bitbucket.org/heroes/test.git
CMD ["bash","/opt/app/bin/connect.sh"]