1、通过命令查询
# docker search php
2、查看Docker官方镜像网站
镜像地址:https://hub.docker.com/_/php?tab=tags
默认 docker pull php 安装最新版,我们这里安装PHP7.3.27-fpm
3、拉取命令
# docker pull php:7.3.27-fpm
如果行过程可能有点慢,你可以改变镜像,最后出现如图:
OK 镜像下载成功
# docker images
4、创建并启动php容器
使用镜像php:7.3.27-fpm创建容器,定义容器名为:my_phpfpm
定义本地的PHP工作目录为:/home/wwwroot/default/
# docker run -d --name my_phpfpm -v /home/wwwroot/default:/var/www/html -p 9000:9000 php:7.3.27-fpm
参数说明:
-d 让容器在后台运行
-p 添加宿主机的9000端口(前面的)到容器的9000端口(后面的)映射
-v 添加目录映射,即宿主机上的 /home/wwwroot/default 和此php容器中的 /var/www/html目录是同步的, 表示将宿主机中项目的目录 /home/wwwroot/default 挂载到容器的/var/www/html (此目录为官方默认的PHP工作目录)
--name my_phpfpm: 将容器命名为 my_phpfpm
执行此命令出现如:
OK PHP容器创建成功:
查看此容器是否开启
# docker ps -a
出现如图:
OK已经开启了此容器
5、查看phpfpm是否开启了9000端口
# netstat -tunlp | grep 9000
这步很重要,没启动的话需要重装php镜像。netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
参数说明:
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
出现如图所示:
OK ,9000端口开启成功
6、宿主主机创建nginx挂载目录
通过上一篇Docker安装Nginx里,我们认识到docker中的nginx 默认容器的站点目录结构为:
# /etc/nginx/ --根目录:
# /etc/nginx/nginx.conf --默认nginx配置文件
# /etc/nginx/conf.d/ --默认vhost目录
# /etc/nginx/conf.d/default.conf --默认访问的站点配置文件
# /usr/share/nginx/html --默认站点目录
这里我们设置传统的宿主机的/usr/local/nginx/conf/vhost目录 来映射 nginx 容器的/etc/nginx/conf.d目录
创建此目录
# mkdir -p /usr/local/nginx/conf/vhost
在该目录下创建一个站点的nginx配置文件/usr/local/nginx/conf/vhost/default_mytest.conf,内容如下:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
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 /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
说明:
php:9000: 表示 php-fpm 服务的 URL,下面我们会具体说明。
/var/www/html/: 是上面步骤4我们创建的php容器my_phpfpm容器中php文件的存储路径,映射到本地的 /home/wwwroot/default目录
7、创建nginx镜像,执行php
通过上一篇Docker安装nginx 我们已经为nginx创建了名为nignx118 的容器。此80端口已被占用,因此这里我们使用8083端口(如果仍想使用80端口,请卸载上面的nignx118容器)
# docker run --name my_nginx -p 8083:80 -d -v /home/wwwroot/default:/usr/share/nginx/html:ro -v /usr/local/nginx/conf/vhost:/etc/nginx/conf.d:ro --link my_phpfpm:php nginx:1.18
参数说明:
-- name my_nginx 指定此容器的名称, 不可重复
-p 8083:80: 端口映射,把此容器中的 80 映射到本地的 8083 端口。
/home/wwwroot/default: 是本地 站点的文件的存储目录,/usr/share/nginx/html 是此my_nginx 容器内html文件的存储目录(这里只站点目录)。
/usr/local/nginx/conf/vhost: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是此my_nginx 容器内nginx配置文件的存储目录。
--link my_phpfpm:php: 把 上面步骤4创建的PHP的容器 my_phpfpm 的网络并入 nginx,并通过修改 nginx的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。
因为我们上面的nginx配置文件使用的是 " fastcgi_pass php:9000; " 因此这里是 “my_phpfpm:php” , 如果上面是“fastcgi_pass 127.0.0.1:9000;”这里就应该是 “my_phpfpm:127.0.0.1”
出现如图:
OK 安装成功
8、创建动态文件
在/home/wwwroot/default/目录下创建index.php文件
<?php
phpinfo();
?>
访问:http://106.12.52.97:8083/ 如图:
OK nginx解析 PHP站点创建成功
9、nginx容器 与宿主机目录的对应关系
本地宿主主机目录:
# /home/wwwroot/default/ 设置本地站点目录
# /home/wwwroot/default/index.php --创建测试PHP文件
# /usr/local/nginx/conf/vhost/ 设置本地nginx配置目录
# /usr/local/nginx/conf/vhost/default_mytest.conf 本地ningx配置文件
进入my_nginx虚拟机
# docker exec -it my_nginx /bin/bash
如图:
由此可见 容器的/etc/nginx/conf.d/目录下的default_mytest.conf 就是 我们本地主机下/usr/local/nginx/conf/vhost/目录下的default_mytest.conf
-v /usr/local/nginx/conf/vhost : /etc/nginx/conf.d
如图:
容器的/usr/share/nginx/html/目录下的index.php 就是 我们本地主机下/home/wwwroot/default目录下的index.php
-v /home/wwwroot/default :/usr/share/nginx/html