Dockerfile 合并层

Dockerfile 要求在保证功能的前提下,尽量减少层数。可以通过合并 apt install 来达到减少层的目的。

原本的样子:

RUN apt update \
     && apt install -y --no-install-recommends --allow-unauthenticated \
        lxde-core lxde gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*
# ---     
RUN apt update \
	&& install -y --no-install-recommends --allow-unauthenticated \
	software-properties-common curl apache2-utils \
    supervisor nginx sudo net-tools zenity xz-utils \
    dbus-x11 x11-utils alsa-utils \
    mesa-utils libgl1-mesa-dri \
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*

两个 RUN 很相似,先更新,再安装,最后删。

这样 build 的镜像会有两层,不符合最小层的原则,还有就是两次 RUN 都执行了 apt update 这样会更新两次软件源,延长了 build 的时间。总之就是效率很低,而且产物还不理想。

修改后的样子:

RUN apt update \
     && apt install -y --no-install-recommends --allow-unauthenticated \
        lxde-core lxde gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine\
# ---    
	software-properties-common curl apache2-utils \
    supervisor nginx sudo net-tools zenity xz-utils \
    dbus-x11 x11-utils alsa-utils \
    mesa-utils libgl1-mesa-dri \
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*

这样安装相同的 packages 只需要更新一次软件源,而且构建的镜像只有一层。

几个命令解释:

  • -y :同意安装,build docker 是非交互的过程,所以要使用 -y 默认同意安装。

  • --no-install-recommends :不安装推荐的软件。非必要的文件不安装,减少镜像的体积。

  • --allow-unauthenticated : 允许安装不可信的 package。

  • apt autoclean 命令清除遗留在 /var/cache/apt/archives/ 目录下的文件。

  • apt autoremove 移除未使用的软件包。

  • rm -rf /var/lib/apt/lists/* : /var/lib/apt/lists/ 目录下存放的都是软件源的 metadata,也就是用 apt update 时下载的文件。不能乱删,第一个 RUN 到后面把这个目录下文件给删了,第二个 RUN 就必须重新 apt update ,不然的话,第二个 RUN 中的 apt install 很可能就会报错 E: Unable to locate package xxx,原因是找不到软件源。

PS:开发还是应该要有点运维功底的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值