提升Dockerfile构建速度:预下载文件与分段构建策略

问题背景

在原始的Dockerfile中,安装 fontconfig 工具时需要从网络下载文件,导致构建速度较慢。为了提升构建速度,我决定通过预下载文件与分阶段构建的方式来优化。

预下载文件

为了避免在构建过程中从网络下载文件,提前将 SimSun.ttf 字体文件和 sifan-erp-h3yun-api.jar 下载到本地。

  • SimSun.ttf 放在 ./fonts/ 目录下。
  • sifan-erp-h3yun-api.jar 放在 ./target/ 目录下。

分阶段构建

为了进一步提升构建速度,将Dockerfile分为两个部分:Dockerfile.baseDockerfile

Dockerfile.base

Dockerfile.base 用于构建基础镜像,包含字体安装和 fontconfig 工具的安装。

bash

复制

# Dockerfile.base
# 基础镜像 Dockerfile镜像构建时,需要先构建此镜像
FROM openjdk:8-jdk-alpine

# 安装中文字体(宋体)
# 创建自定义字体目录
RUN mkdir -p /usr/share/fonts/truetype
COPY ./fonts/SimSun.ttf /usr/share/fonts/truetype/

# 安装 fontconfig 工具
RUN apk add --no-cache fontconfig
RUN fc-cache -f -v

Dockerfile

Dockerfile 基于 Dockerfile.base 构建的镜像,用于部署应用程序。

bash

复制

# Dockerfile
# 基于本地基础镜像 Dockerfile.base
FROM jdk-font-h3yun:1.0

# 设置工作目录
WORKDIR /opt/apps/h3yun/logs/

# 拷贝应用程序 JAR 文件
ADD ./target/sifan-erp-h3yun-api.jar /App/

# 暴露端口(仅声明,无实际作用)
EXPOSE 9091

# 指定 JVM 参数并运行 JAR 文件
ENTRYPOINT ["java", "-Xmx512m", "-jar"]
CMD ["/App/sifan-erp-h3yun-api.jar"]

构建指令

  1. 构建基础镜像:

    bash

    复制

    docker build -t jdk-font-h3yun:1.0 -f Dockerfile.base .
    
  2. 构建应用程序镜像:

    bash

    复制

    docker build -t sifan-erp-h3yun-api:1.0 -f Dockerfile .
    

优势

  • 基础镜像只需构建一次:基础镜像中包含耗时的操作(如字体安装和 fontconfig 工具的安装),只需构建一次,后续构建应用程序镜像时可以直接使用。
  • 提升构建速度:由于基础镜像已经构建完成,后续构建应用程序镜像时只需进行简单的文件拷贝和配置,大大缩短了构建时间。
  • 减少网络依赖:通过预下载文件,避免了在构建过程中从网络下载文件,减少了网络依赖和潜在的构建失败风险。

通过这种分阶段构建的方式,不仅提升了构建速度,还使得Dockerfile更加模块化和易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值