Docker – 如何禁用PHP的分机/模块
我正在开发一个PHP API,我想在我的PHP-FPM映像中禁用未使用的PHP模块 ,比如“sqlite3,pdo ..”。
我是一个docker初学者,我想知道是否有什么类似的docker-php-ext-enable
如果不是什么是禁用未使用的PHP模块的最佳做法。
是的,这是可能的。
取自https://hub.docker.com/_/php/
例如,如果你想拥有一个带有
iconv
,mcrypt
和gd
扩展名的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
来查看,相关的扩展已经消失了。