php-fpm

1
docker run -dit -v /root/html/:/var/www/html/ --name php registry.cn-beijing.aliyuncs.com/yinliao/php-fpm:7.3

/root/html 宿主机目录,放项目
/var/www/html 容器内部的工作目录

镜像已经安装部分插件,可进入容器 php -m 查看

nginx

1
docker run -dit --name nginx --link php -v /root/nginx/:/etc/nginx/conf.d/ -v /root/html/:/usr/share/nginx/html -p 80:80 registry.cn-beijing.aliyuncs.com/yinliao/nginx:1.16.1

/root/nginx 宿主机目录,放配置
/etc/nginx/conf.d 容器内部配置目录
/root/html 宿主机目录,放项目
/usr/share/nginx/html 容器内部的工作目录

这里贴下 nginx 的 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 80;
root /usr/share/nginx/html;
index index.php;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

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

location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

需要注意的点

  • API等项目,必须有try_files这一段,否则不会转发到php 点击全部404
  • 匹配结尾 php 的location,root 需要写 php-fpm 的工作目录
  • 原因是 nginx 和 php-fpm 共用一个宿主机目录,但他们并不是一个容器所以这里不同(个人见解)
  • php-fpm 使用官方提供的镜像为底包,添加所需扩展重新打包 但并不适用于所有人
  • nginx 和 php-fpm 的配置没有进行性能调整,均为默认
  • 两个镜像均调整时区为上海
  • 两个容器之间链接通过启动时候的–link命令完成,同样也可自行创建网络 并加入 (创建网络并未测试)