1、通过命令查询

# docker search php

2、查看Docker官方镜像网站

镜像地址:https://hub.docker.com/_/php?tab=tags 

docker search docker search php_nginx

默认 docker pull php 安装最新版,我们这里安装PHP7.3.27-fpm

docker search docker search php_docker search_02

3、拉取命令

# docker pull php:7.3.27-fpm

如果行过程可能有点慢,你可以改变镜像,最后出现如图:

docker search docker search php_nginx_03

OK 镜像下载成功

# docker images

docker search docker search php_php_04

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

执行此命令出现如:

docker search docker search php_html_05


OK PHP容器创建成功:

查看此容器是否开启

# docker ps -a

出现如图:

docker search docker search php_docker search_06

 

OK已经开启了此容器

5、查看phpfpm是否开启了9000端口

# netstat -tunlp | grep 9000

这步很重要,没启动的话需要重装php镜像。netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。

参数说明:

-t (tcp) 仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化为数字

-l 仅列出在Listen(监听)的服务状态

-p 显示建立相关链接的程序名

出现如图所示:

docker search docker search php_docker search_07


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”

出现如图:

docker search docker search php_html_08


OK 安装成功

docker search docker search php_docker search_09

8、创建动态文件

在/home/wwwroot/default/目录下创建index.php文件

<?php
    phpinfo();
?>

访问:http://106.12.52.97:8083/   如图:

docker search docker search php_nginx_10

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

如图: 

 

docker search docker search php_docker search_11


由此可见 容器的/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

如图:

docker search docker search php_php_12


容器的/usr/share/nginx/html/目录下的index.php 就是 我们本地主机下/home/wwwroot/default目录下的index.php

-v /home/wwwroot/default :/usr/share/nginx/html