问题描述
通常在构建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
选项。这将确保它们不会留下任何残留文件,而不是可能留下一些配置文件和其他类似的文件,这也有助于减少空间使用。
以上是优化镜像大小的两个方法。你可以根据自己的需求选择其中一个或两个方法来减小镜像的大小。