Docker 安装 PHP
查找指定版本PHP镜像
$ docker search php:7.2.0-fpm
拉取镜像
$ docker pull php:7.2.0-fpm
运行容器
$ docker run --name docker-php-fpm -p 9000:9000 -d php:7.2.0-fpm
把配置文件复制到本地
$ cd /Users/ct/etc/docker/php7.2/php-fpm.d/
$ docker cp docker-php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
$ cd /Users/ct/etc/docker/php7.2/
$ docker cp docker-php-fpm:/usr/src/php/php.ini-production php.ini
注意:docker-php-fpm:/usr/src/php/php.ini-production,在实例出的容器中,不一定是路径src/php,拉取的php版本镜像不同,php.ini路径有可能不同。
可以这样查看php.ini路径
# 先进入容器
$ docker exec -it docker-php-fpm /bin/bash
$ cd /usr/src/ && ls
# 有以下两个文件
php.tar.xz php.tar.xz.asc
# 这里我们需要解压php.tar.xz文件,因为php.ini-production就在其中
# 先解压xz
$ xz -d php.tar.xz
# 再解压tar
$ tar -xvf php.tar
解压完毕后, php.ini-production便出现了,我当时的路径是/usr/src/php-7.1.9/php.ini-production。
在本地服务器修改 php.ini 的内容,设置cgi.fix_pathinfo=1
注意:前面关于php-fpm的一系列操作主要是为了获得配置文件,并没有挂载本地目录到容器中,所以接下来需要删除容器,重新实例一个容器出来
$ docker stop docker-php-fpm
$ docker rm docker-php-fpm
$ docker run --name docker-php-fpm -p 9000:9000 -v /Users/ct/project:/var/www/html -v /Users/ct/etc/docker/php7.2/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /Users/ct/etc/docker/php7.2/php.ini:/usr/local/etc/php/php.ini -d php:7.2.0-fpm
常见异常:
使用docker中部署的PHP连接MySQL的时候,如果报以下异常:
"could not find driver (SQL: xxxx)"
原因:docker中部署的PHP缺少pdo_mysql扩展。
安装pdo_mysql扩展:
# 先进入容器
$ docker exec -it docker-php-fpm /bin/bash
在该镜像的/usr/local/bin目录下有一个docker-php-ext-install程序专门用来安装php扩展
运行docker-php-ext-install即可显示出能够安装的扩展,配合docker-php-ext-enable程序可以控制扩展的启动/禁用
$ cd /usr/local/bin
$ ./docker-php-ext-install pdo_mysql