一、nginx和php的一些原理
1、nginx 是一个 web 服务器,它只能处理静态文件,无法处理 PHP Python 等具体程序语言的请求。所以,原理是这样,用户统一先请求到 nginx,nginx 会再把请求转发给 php-fpm。
2、php-fpm是处理 PHP 请求的一个东西,实现了 FastCGI 协议的一个东西,它叫PHP FastCGI 管理器。
3、 FastCGI 是什么?是一种与 Web 服务器通信的协议,规定了要传什么数据,具体什么格式。
二、前提条件
centos,安装了docker环境,当然你也可以安装宝塔,他俩不冲突,宝塔里可以方便的看到docker的一些东西。
php 镜像有fpm和cli两个版本。php-cli是命令行版本,而php-fpm是作为apache或者nginx等服务器软件处理PHP文件的扩展。这里选择fpm。
三、下载php和nginx镜像
四、创建并运行PHP容器
给容器取个名字
php容器的端口默认是9000,映射到宿主机的9000端口
把宿主机的PHP源代码目录 挂载到容器内的 。未来在容器内访问 就相当于访问宿主机的 ,容器的删除不会影响到源代码。
后台静默运行
镜像名
如:报错Error response from daemon: driver failed programming external connectivity on endpoint XXX(端口映射或启动容器时报错)
解决方法:输入指令 systemctl restart docker 重启docker服务及可重新生成自定义链DOCKER
查php容器在docker的内网地址
docker inspect 获取Docker容器或者Docker镜像的元数据
我的是,这个如果你安装了宝塔的话也可以再宝塔里看到,这个ip下边要用。
也可以直接通过查看元数据里的字段来获取ip
五、创建并运行nginx容器
1、 创建一个存放配置文件的目录。这个目录等下要挂载到容器里。
2、 进入目录并创建一个配置文件,并在里面填入如下内容。比如 ,一个站点一个配置文件。
创建并启动 nginx 容器
-v /docker/www:/www 把宿主机的源码目录 /docker/www 挂载到容器内的 /www 目录。容器内访问 /www 就相当于访问 /docker/www
-v /docker/nginx/conf.d:/etc/nginx/conf.d 把宿主机的配置目录,挂载到容器内nginx的配置目录。nginx 会自动去加载这目录内所有的配置文件。/opt/docker/nginx/conf.d 里建议每个站点对应一个配置文件。
六、验证
1、 看是否运行了刚才的两个容器
2、 目录里上传ThinkPHP的最新代码
3、访问你的域名或IP看是否可以访问。注意我绑定了三个域名,localhost可以让我通过ip直接访问到
七、链接宿主机mysql
只需要注意ip不是127.0.0.1就可以了,ip为172.17.0.1
感兴趣的可以了解另一篇文章
《Docker容器的程序连接宿主机的MySQL》