docker部署php+nginx环境

6,948 阅读2分钟

使用docker安装好php和nginx后,配置nginx运行php-fpm中间也花费了不少时间,坑也比较多下面说下我的部署过程

1.拉取官方镜像

docker pull nginx
docker pull bitnami/php-fpm

2.使用php-fpm镜像开启php-fpm应用容器

docker run -d --name myFpm -v /var/www/html:/usr/share/nginx/html bitnami/php-fpm

-d 后台运行容器的意思 -v 指定宿主机与容器的映射关系。/var/www/html为宿主机的项目目录(自定义的),/usr/share/nginx/html为nginx服务器项目默认的路径。

3.开启nginx容器

docker run -d --name myNginx -p 8080:80 -v /var/www/html:/usr/share/nginx/html nginx

-p : 该参数设置端口对应的关系。所有访问宿主机8080端口的URL会转发到nginx容器的80端口。

4.查看php-fpm的ip地址,配置nginx用

docker inspect myFpm | grep IPAddress

5.修改nginx配置

进入容器

docker exec -it myNginx /bin/bash

-i : --interactive,交互模式。 -t : --tty,开启一个伪终端。 /bin/bash : 必须写,否则会报错。这是开始伪终端时,进入bash界面,也就是命令行界面。

查看对应的配置文件位置

/etc.nginx.conf.d/default.conf

6.复制配置文件到usr路径下

进入usr目录下

/usr/share/nginx/html

若没有nginx文件夹,自己创建mkdir nginx

复制nginx容器中的默认配置

docker cp myNginx:etc/nginx/conf.d/default.conf ./default.conf

这样就在当前路径下生成了一个默认配置

vim default.conf编辑

location ~ \.php$ {
        fastcgi_pass   你的php-fpmIP 地址:9000;
        fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        include        fastcgi_params;
    }

保存退出 然后同步配置到容器中

docker cp ./default.conf myNginx:/etc/nginx/conf.d/default.conf

进入nginx容器重新加载配置

docker exec -it myNginx /bin/bash
service nginx reload

大功告成了吗,不存在的

访问127.0.0.1:8080/info.php

出现 file not found,美滋滋.

注意nginx中的配置

location ~ \.php$ {
        fastcgi_pass   172.17.0.2:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        include        fastcgi_params;
    }


fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name; 
 这一条要改成这样,/scripts是一个目录名,也就是你站点的根目录,比如说,你访问/index.php这个文件,其实就是访问操作系统中/scripts/index.php这个文件,但是文件并不存在,要改成当前的nginx服务器路径.

然后同步容器中的配置,访问访问127.0.0.1:8080/info.php 出现php扩展页面,好了大功告成