带有Python软件包的Ubuntu的Docker映像大小最大为1.7 G

问题描述 投票:0回答:3

以下是我的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。

谢谢

docker dockerfile docker-image
3个回答
0
投票

您遇到了多个问题。

首先,每个RUN apt install都在增加图像大小,应该将它们全部置于同一RUN阶段,并在该阶段结束时删除所有缓存的apt文件。

第二,您正在安装不必要的东西。例如,为什么需要vimgit?如果您不构建任何内容,为什么要安装build-essential和其他与构建相关的内容?

第三,您似乎尝试进行多阶段构建,但最终将所有内容添加到同一图像中。阅读python多阶段构建。


0
投票

如果我们考虑最佳实践,而不是多个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,则可以使用多阶段构建,可以在最终阶段将其删除

如果可能,您也可以使用高山版本。


0
投票

现在较小:

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"]
© www.soinside.com 2019 - 2024. All rights reserved.