Docker 图像构建(摆脱依赖)
Docker Image Build (Get rid of Dependencies)
我正在从 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)吗?并将编译后的结果添加到新图像中?
在主机操作系统上创建一个目录。
使用 Docker Volume 将你的目录挂载到容器,到你的 *.so 应该被找到的地方。
一旦你编译了扩展,你至少应该能够摆脱 -dev 包。 -dev 包包括诸如 c 源头文件 (.h) 之类的内容。
因此在您的示例中,您安装了 libxml2-dev 和 libxml2。在这种情况下,libxml2 包是 运行 代码所需的文件,libxml2-dev 是编译任何使用 libxml2 的代码所需的包。当您编译 PHP 的扩展时,扩展不包含 运行 特定功能的所有二进制文件,它通常依赖于安装在 OS.[=10 上的包=]
您可以摆脱 gcc 和一些支持的东西,但您可能需要经历一个删除包的过程,然后测试是否有任何问题。
也可以删除 PHP 中的一些模块,同样这取决于您的代码及其作用。尽管这超出了我所做的范围,而且我不确定这样做的好处。
我正在从 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)吗?并将编译后的结果添加到新图像中?
在主机操作系统上创建一个目录。 使用 Docker Volume 将你的目录挂载到容器,到你的 *.so 应该被找到的地方。
一旦你编译了扩展,你至少应该能够摆脱 -dev 包。 -dev 包包括诸如 c 源头文件 (.h) 之类的内容。
因此在您的示例中,您安装了 libxml2-dev 和 libxml2。在这种情况下,libxml2 包是 运行 代码所需的文件,libxml2-dev 是编译任何使用 libxml2 的代码所需的包。当您编译 PHP 的扩展时,扩展不包含 运行 特定功能的所有二进制文件,它通常依赖于安装在 OS.[=10 上的包=]
您可以摆脱 gcc 和一些支持的东西,但您可能需要经历一个删除包的过程,然后测试是否有任何问题。
也可以删除 PHP 中的一些模块,同样这取决于您的代码及其作用。尽管这超出了我所做的范围,而且我不确定这样做的好处。