docker安装PHP

查找下载PHP镜像

docker search php

docker pull php:7.4-fpm

启动PHP容器

docker run --name php-fpm7.4 -v /root/nginx/www/:/www -d php:7.4-fpm

安装扩展

进入 php-fpm 容器 docker exec -it php-fpm7.4 bash

查看安装的扩展 php -m

安装 pdo_mysql 扩展 docker-php-ext-install pdo_mysql

常用命令:

  • docker-php-source 在容器中创建 /usr/src/php 文件夹

  • docker-php-ext-install 扩展名 安装并启动扩展(常用)

  • docker-php-ext-enable 扩展名 启动PHP扩展

  • docker-php-ext-configure 添加扩展自定义配置,和 enable 搭配使用

如果需要安装 zip 扩展:

安装相应依赖:apt-get update && apt-get install -y zlib1g-dev && apt-get install -y libzip-dev

安装并启动 zip 扩展 docker-php-ext-install zip

可用扩展,有些扩展可以直接安装,有些可能需要依赖包:

bcmath、bz2、calendar、ctype、curl、dba、dom、enchant、exif、ffi、fileinfo、filter、ftp、gd、gettext、gmp、hash、iconv、imap、intl、json、ldap、mbstring、mysqli、oci8、odbc、opcache、pcntl、pdo、pdo_dblib、pdo_firebird、pdo_mysql、pdo_oci、pdo_odbc、pdo_pgsql、pdo_sqlite、pgsql、phar、posix、pspell、readline、reflection、session、shmop、simplexml、snmp、soap、sockets、sodium、spl、standard、sysvmsg、sysvsem、sysvshm、tidy、tokenizer、xml、xmlreader、xmlrpc、xmlwriter、xsl、zend_test、zip

重启php容器 docker restart php-fpm7.4

安装 Redis 扩展

docker exec -it php bash

pecl install -o -f redis

# 在 php.ini 中添加 extension=redis.so
cd /usr/local/etc/php
cp php.ini-production php.ini

# 容器内一般是没装 vim 或者 vi 的,所有用下面方式写入内容到文件
echo "extension=redis.so" >> /usr/local/etc/php/php.ini

# 查看是否启用了扩展
php -m | grep redis

安装 swoole

## 方式一:
docker exec -it php bash

pecl install swoole

echo "extension=swoole.so" >> /usr/local/etc/php/php.ini

## 方式二:
docker-php-ext-install swoole
// 上面命令如果安装失败,会告诉你error: /usr/src/php/ext/swoole does not exist
// 然后下载 swoole 源码包,解压后放入到 /usr/src/php/ext/swoole 中
// 然后再次执行 docker-php-ext-install swoole

默认安装扩展

Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

安装完成后的扩展

bcmath
Core
ctype
curl
date
dom
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib

将nginx和PHP容器链接起来

创建目录:mkdir -p ~/nginx/conf/conf.d

在该目录下添加 test.com.conf 文件,内容如下:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
参数 说明
root 该目录映射到 /root/nginx/www
fastcgi_param /www 为启动PHP容器的目录,映射到本地

启动nginx

docker run --name php-nginx -p 10000:80 -d \
    -v ~/nginx/www:/usr/share/nginx/html:ro \
    -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
    --link php-fpm71:php \
    nginx
  • ro 只读

  • --link php-fpm7.4:phpphp-fpm7.4:php 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

注:因为是nginx去 link PHP 所以,在启动Nginx的时候,PHP要先启动起来

启动如下图所示:

编写 index.php 文件 查看phpinfo();

vim /root/nginx/www/index.php

访问路由 http://192.168.174.130:10000/index.php