在Dockerfile中安装php扩展后,我是否还需要头文件?

124次阅读
没有评论

问题描述

通常在构建php的docker镜像时,我使用以下方法:

FROM  php:7.2-apache
RUN apt-get update && \
    apt-get install -y libghc-postgresql-simple-dev &&\
    docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &&\
    docker-php-ext-install pdo pgsql pdo_pgsql &&\
    // 安装其他扩展
    apt-get autoremove -y &&\
    apt-get autoclean &&\
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*

但是这样会导致镜像大小为1.2GB,我需要节省一些空间。据我所知,头文件(例如libghc-postgresql-simple-dev)在我的镜像中占用了很多空间,所以在构建和安装模块后,我想删除它并使用非开发版本的libghc-postgresql-simple,或者完全删除它。
所以我想问:1. 在运行docker-php-ext-install时,如何将其静态链接到我的构建中,以删除libghc-postgresql-simple-dev包?2. 一旦我构建了php模块,删除libghc-postgresql-simple-dev并使用libghc-postgresql-simple是否会使php psql扩展正常工作?
这样做的目的是为了优化构建,使我的镜像尽可能小。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你不需要静态链接来删除*-dev包并使一切正常工作。如果需要静态链接,那么这是基本包和-dev包中的一个错误,应该向上游报告。因此,理论上,在安装扩展和其他内容之后,你可以执行以下操作,从而显著缩小镜像:

apt-get install -y libghc-postgresql-simple && apt-get remove libghc-postgresql-simple-dev

方案2

你还可以采取其他两个措施来改善镜像大小:
– 对于所有的apt-get install命令,使用--no-install-recommends选项,并明确列出你所依赖的每个包。推荐的依赖关系是Debian软件包中的一种可选依赖关系,默认情况下会被安装。它们通常会占用大量空间,但实际上你可能不需要大部分(或任何)它们,因此通过不自动安装它们并只安装实际需要的内容,可以节省空间。这样做可以将镜像大小减少数百MB。
– 在删除软件包时,使用--purge选项。这将确保它们不会留下任何残留文件,而不是可能留下一些配置文件和其他类似的文件,这也有助于减少空间使用。

以上是优化镜像大小的两个方法。你可以根据自己的需求选择其中一个或两个方法来减小镜像的大小。

正文完