docker安装nginx+php

 拉取镜像:

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。

这是我的目录,快下班了,我的名字也不打码了:

docker安装nginx+php_第1张图片

 

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;
    }

  }

docker安装nginx+php_第2张图片

你可能感兴趣的:(linux,docker,docker)