拉取镜像:
docker pull nginx
docker pull php:7.2-fpm #不知道为什么docker pull php:7.2后面会出问题,可能两个镜像不一样吧,先不管了
创建一些路径,后面挂载到容器里,因为我们不可能每次修改配置文件都进容器里面修改,也不能把项目放在容器里面:
mkdir /dockernginx/ #主要是和其他路径区分开
mkdir /dockernginx/conf/ #nginx的配置 同本地的/usr/local/nginx/conf
mkdir /dockernginx/conf/conf.d #项目的nginx配置 同本地的/usr/local/nginx/conf/vhost
mkdir /dockernginx/www #项目路径 同本地的/data/wwwroot
运行php
docker run --name dockerphp -v /dockernginx/www:/www -d php:7.2-fpm
--name 是起一个名称
-v 是把本地的 /dockernginx/www 挂载到容器的 /www 路径
-d 后台运行
php:7.2-fpm 是镜像的名字和tag
运行nginx, 这一步是重点
docker run --name dockernginx -p 10001:80 -d -v /dockernginx/www:/usr/share/nginx/html:ro -v /dockernginx/conf:/etc/nginx:ro -v /dockernginx/logs:/var/log/nginx --link dockerphp nginx
-p 本地的10001端口绑定到容器的80端口
-v 挂载 后面的 :ro 是权限
--link 是和刚刚运行的php容器进行通讯,我也解释不好
菜鸟教程上面解释的是:
--link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。
这是我的目录,快下班了,我的名字也不打码了:
nginx.conf 最基础版:
user nginx;
worker_processes auto;
error_log /var/log/nginx/access.log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
multi_accept on;
}
http {
include mime.types;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
######################## default ############################
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location ~ \.php$ {
#这里的 dockerphp2:9000 需要注意,对新手来说是个坑,我就在这浪费时间了
fastcgi_pass dockerphp2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
########################## vhost #############################
include /etc/nginx/conf.d/*.conf;
}
conf.d下面还有一个配置文件,都放上来吧:
server {
listen 80;
server_name dockerlnmp.test.com;
location / {
root /usr/share/nginx/html/dockerlnmp.test.com;
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass dockerphp2:9000;
fastcgi_index index.php;
#这一行也是一个小坑,这一行的具体作用百度都有,这里比上个目录的nginx.conf多了$server_name,不加的话他就不会进项目目录找入口文件,这样写的话项目路径必须和监听的url一致
fastcgi_param SCRIPT_FILENAME /www/$server_name/$fastcgi_script_name;
include fastcgi_params;
}
}