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命令 创建容器
具体步骤:
- 宿主机上创建 /wwwroot/extensions/nginx 目录存放nginx配置信息
- /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; 网站配置存放目录
- 在宿主机上的创建 /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 类型的网络使得所创建的容器可在同一网络下通信。
- 宿主机上创建 /wwwroot/www/lnmp/ 目录,并把php代码放入。
- 将 docker-compose.yml 配置文件放入任意目录,并在目录内执行命令
docker-compose up -d
- 在宿主机上修改了 /wwwroot/extensions/nginx/host 目录下的配置后,进入nginx容器,并输入nginx重启命令
/etc/init.d/nginx reload
- 使修改生效
注意:
- 容器卷挂载文件,宿主机上必须存在对应的文件(指定目录挂载时)(匿名和具名挂载应该没事)
挂载nginx容器 下的 nginx.conf 文件 时,宿主机上需要有nginx.conf 文件. - 容器券挂载目录,容器内的挂载目录必须为空(指定目录挂载时)(匿名和具名挂载应该没事)
不能直接 把nginx容器内的 /etc/nginx/conf.d 目录挂载到容器卷上,因为 /etc/nginx/conf.d 目录下存在 默认default.conf 文件。 - 第二步的 在宿主机创建新的 nginx 网站配置目录并挂载,可以不这样。而是直接用nginx容器默认的 /etc/nginx/conf.d/default.conf 文件进行挂载,这样的话,需要在宿主机上先创建default.conf 文件 ,然后就可以直接在宿主机上修改 网站配置信息
- 容器券挂载 总结:https://www.jianshu.com/p/e605de64e9f9