Docker镜像构建(摆脱依赖关系)

时间:2018-03-13 07:21:31

标签: php docker dependencies alpine

我正在从php:7.2-fpm-alpine的基础图像构建一个php docker镜像,需要一些自定义的php扩展。

与以下用于安装依赖项和一些额外扩展的命令类似。

RUN apk upgrade --update && apk add libpng-dev libjpeg-turbo-dev \
 freetype-dev libbz2 libxml2-dev libxml2 bzip2-dev libxslt libxslt-dev \
 && docker-php-ext-install bcmath calendar gd hash zip pdo_mysql

由于我需要为扩展程序手动安装依赖项,因此将其编译为类似bcmath.so gd.so的内容。

我在想是否可以摆脱这些依赖关系并将*.so复制到新映像中,因为我正在种植以在Dockerfile中使用多阶段构建。

问题是我可以摆脱GCC +编译器和其他一些依赖项(openssl,curl)吗?并将编译后的结果添加到新图像中?

2 个答案:

答案 0 :(得分:0)

在主机操作系统上创建目录。 使用Docker Volume将目录挂载到Container,到达应该找到* .so的位置。

答案 1 :(得分:0)

一旦编译了扩展,你应该能够至少摆脱-dev包。 -dev包包含c源头文件(.h)等内容。

因此,在您的示例中,您将安装libxml2-dev和libxml2。在这种情况下,libxml2包是运行代码所需的文件,libxml2-dev是编译使用libxml2的任何代码所需的包。编译PHP扩展时,扩展不包含运行特定功能的所有二进制文件,它通常依赖于操作系统上安装的软件包。

你可以摆脱gcc和一些支持的东西,但你可能需要经历一个删除包然后测试是否有任何破坏的过程。

也可以删除PHP中的一些模块,这又取决于你的代码和它的作用。虽然这超出了我所做的范围,但我不确定这样做的好处。