【问题标题】:Docker Image Build (Get rid of Dependencies)Docker Image Build(摆脱依赖)
【发布时间】:2018-03-13 15:55:47
【问题描述】:

我正在从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)吗?只是将编译结果添加到新图像中?

【问题讨论】:

    标签: php docker dependencies alpine


    【解决方案1】:

    一旦你编译了扩展,你至少应该能够摆脱 -dev 包。 -dev 包包括诸如 c 源头文件 (.h) 之类的东西。

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

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

    也可以删除 PHP 中的一些模块,这同样取决于您的代码及其作用。虽然这超出了我所做的范围,而且我不确定这样做的好处。

    【讨论】:

      【解决方案2】:

      在主机操作系统上创建一个目录。 使用 Docker Volume 将你的目录挂载到 Container,到你的 *.so 应该被找到的地方。

      【讨论】:

      • 问题不在于在哪里可以找到 *.so 文件。我在考虑 *.so 文件是否会依赖那些已安装的依赖项(gcc openssl openssl-dev 等),因为我不会在目标容器中安装这些依赖项。
      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 2020-10-18
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多