Docker – 如何禁用PHP的分机/模块

我正在开发一个PHP API,我想在我的PHP-FPM映像中禁用未使用的PHP模块 ,比如“sqlite3,pdo ..”。

我是一个docker初学者,我想知道是否有什么类似的docker-php-ext-enable如果不是什么是禁用未使用的PHP模块的最佳做法。

是的,这是可能的。

取自https://hub.docker.com/_/php/

例如,如果你想拥有一个带有iconvmcryptgd扩展名的PHP-FPM镜像,你可以inheritance你喜欢的基本镜像,然后写下你自己的Dockerfile:

 FROM php:7.0-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng12-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd 

请记住,您必须手动安装扩展的依赖关系。 如果扩展需要自定义configure参数,可以使用docker-php-ext-configure脚本。

最后我find了关键的一点。

在docker php容器中,所有注册的模块都由下面的path下的configuration文件保存。

 /usr/local/etc/php/conf.d/*.ini 

bash容器:

 docker exec -it php_container_name bash 

您可以通过php -m列出所有启用的模块:

并进入该文件夹,你可以看到相关的configuration文件:

 cd /usr/local/etc/php/conf.d/ ls # output docker-php-ext-mcrypt.ini docker-php-ext-mysqli.ini docker-php-ext-opcache.ini opcache-recommended.ini docker-php-ext-zip.ini 

要禁用某个扩展模块,请disabled dir,然后将该.ini文件移入其中,例如:

 mkdir disalbled mv docker-php-ext-opcache.ini disabled mv opcache-recommended.ini 

最后,按Ctrl+D退出容器,然后重新启动容器以进行更改。

 docker restart php_container_name 

你可以进入容器并运行php -m来查看,相关的扩展已经消失了。