如何减小PostgreSQL JDBC FDW Docker镜像体积?
减小PostgreSQL JDBC Foreign Data Wrapper Docker镜像体积的方法
针对你的Dockerfile,这些方法能有效压缩镜像体积:
用多阶段构建拆分编译与运行环境
把编译jdbc_fdw的过程放到单独的构建阶段,最终镜像只保留运行必需的文件,编译依赖(比如jdk、build-essential、postgres-server-dev-all)不会留在最终镜像里。示例如下:# 第一阶段:编译构建 FROM postgres:15-bullseye AS builder COPY jdbc_fdw /usr/share/postgresql/15/contrib/jdbc_fdw COPY ./halo-my-db/ /halo-my-db/ RUN apt-get update && \ apt-get install -y openjdk-11-jdk build-essential postgresql-server-dev-all --no-install-recommends && \ cd /halo-my-db/ && \ chown -R postgres:postgres /halo-my-db && \ ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so /usr/lib/libjvm.so && \ export USE_PGXS=1 && \ export PATH="/usr/lib/postgresql/15/bin:$PATH" && \ cd /usr/share/postgresql/15/contrib/jdbc_fdw && \ make clean && make install && \ # 清理构建阶段的无用文件 apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ rm -rf /halo-my-db/ # 第二阶段:最终运行镜像 FROM postgres:15-slim # 复制运行必需的文件 COPY drivers/ /usr/share/java/ COPY entrypoint-deb.sh /docker-entrypoint-initdb.d # 从构建阶段复制编译好的jdbc_fdw文件 COPY --from=builder /usr/share/postgresql/15/contrib/jdbc_fdw /usr/share/postgresql/15/contrib/jdbc_fdw COPY --from=builder /usr/lib/postgresql/15/lib/jdbc_fdw.so /usr/lib/postgresql/15/lib/jdbc_fdw.so # 如果JDBC FDW运行需要JRE,只装轻量的headless版本 # RUN apt-get update && apt-get install -y --no-install-recommends openjdk-11-jre-headless && \ # apt-get clean && rm -rf /var/lib/apt/lists/*换用更精简的基础镜像
把postgres:15-bullseye换成postgres:15-slim,slim版本剔除了很多不必要的系统工具、文档和库,基础体积能减少几百MB。优化APT安装逻辑
- 所有APT操作合并到一个RUN命令里,减少镜像层数(每一个RUN都会生成新层)
- 始终加
--no-install-recommends,避免安装额外的推荐依赖 - 清理命令(
apt-get clean && rm -rf /var/lib/apt/lists/*)紧跟在安装之后,不要拆分
只复制必要文件
- 不要复制整个jdbc_fdw源码目录到最终镜像,只复制编译好的
.so库文件和必要的SQL脚本 - drivers目录只保留实际需要的JDBC驱动JAR包,删掉多余文件
- halo-my-db目录只在构建阶段使用,不用复制到最终镜像
- 不要复制整个jdbc_fdw源码目录到最终镜像,只复制编译好的
精简Java依赖
如果JDBC FDW运行时需要Java环境,不要装完整的JDK,只安装openjdk-11-jre-headless(无头版JRE,去掉了GUI相关组件,体积小很多);确认不需要Java的话就彻底移除。清理无用文件
编译完成后,立刻删除构建过程中生成的临时文件、源码、缓存等,比如make的临时文件、APT缓存、多余的系统包。
内容的提问来源于stack exchange,提问作者ping2kpm
相关产品推荐
相关产品推荐

