docker-compose 配置php + ningx

docker-compose.yml 配置文件

version: "3.7"
services:
    nginx:
        image: nginx
        restart: always
        ports:
            - "80:80"
        privileged: true    
        volumes:
            - /wwwroot/extensions/nginx/nginx.conf:/etc/nginx/nginx.conf
            - /wwwroot/extensions/nginx/log:/var/log/nginx
            - /wwwroot/extensions/nginx/host:/etc/nginx/host
    php:
        image: php:7.4-fpm
        depends_on: 
            - nginx
        restart: always
        volumes:
            - /wwwroot/www/lnmp/:/www
        privileged: true    

流程描述:
在宿主机上创建php文件目录,创建nginx配置目录,并预先创建好nginx.conf 文件,以便启动docker-compose的时候进行挂载。然后执行docker-compose命令 创建容器
docker-compose 配置php + ningx_第1张图片
docker-compose 配置php + ningx_第2张图片
docker-compose 配置php + ningx_第3张图片

具体步骤:

  1. 宿主机上创建 /wwwroot/extensions/nginx 目录存放nginx配置信息
  2. /wwwroot/extensions/nginx 目录下创建nginx.conf 文件,并写入配置信息
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
   worker_connections  1024;
}

http {
   include       /etc/nginx/mime.types;
   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';

   access_log  /var/log/nginx/access.log  main;

   sendfile        on;
   #tcp_nopush     on;

   keepalive_timeout  65;

   #gzip  on;

   include /etc/nginx/conf.d/*.conf;
   include /etc/nginx/host/*.conf;
}

此配置信息为 nginx 默认配置信息,再加上自定义的 include /etc/nginx/host/*.conf; 网站配置存放目录

  1. 在宿主机上的创建 /wwwroot/extensions/nginx/host 并在此目录下添加自己的网站配置。
    例如:创建一个名字叫baidu.conf 文件,并配置如下
server {
    listen       80;
    listen  [::]:80;
    server_name  baidu.com;
    root   "/www/public";

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
          if (!-e $request_filename) {
   		rewrite  ^(.*)$  /index.php?s=/$1  last;
        }
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    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_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
}
注意2点:
1. root   "/www"; 这个配置为 php 容器里 存放php代码的目录
2. fastcgi_pass   php:9000; 这个配置 里的php代表的的 docker-compose.yml 文件services 里的 php 服务。
因为用 docker-compose 创建容器,docker-compose 会创建一个 bridge 类型的网络使得所创建的容器可在同一网络下通信。
  1. 宿主机上创建 /wwwroot/www/lnmp/ 目录,并把php代码放入。
  2. 将 docker-compose.yml 配置文件放入任意目录,并在目录内执行命令 docker-compose up -d
  3. 在宿主机上修改了 /wwwroot/extensions/nginx/host 目录下的配置后,进入nginx容器,并输入nginx重启命令
    /etc/init.d/nginx reload
  4. 使修改生效

注意:

  1. 容器卷挂载文件,宿主机上必须存在对应的文件(指定目录挂载时)(匿名和具名挂载应该没事)
    挂载nginx容器 下的 nginx.conf 文件 时,宿主机上需要有nginx.conf 文件.
  2. 容器券挂载目录,容器内的挂载目录必须为空(指定目录挂载时)(匿名和具名挂载应该没事)
    不能直接 把nginx容器内的 /etc/nginx/conf.d 目录挂载到容器卷上,因为 /etc/nginx/conf.d 目录下存在 默认default.conf 文件。
  3. 第二步的 在宿主机创建新的 nginx 网站配置目录并挂载,可以不这样。而是直接用nginx容器默认的 /etc/nginx/conf.d/default.conf 文件进行挂载,这样的话,需要在宿主机上先创建default.conf 文件 ,然后就可以直接在宿主机上修改 网站配置信息
  4. 容器券挂载 总结:https://www.jianshu.com/p/e605de64e9f9

你可能感兴趣的:(docker)