您现在的位置是:首页 > PHP框架交流PHP框架交流
docker部署php项目 nginx+php docker搭建
上善若水2024-01-08 15:31:20【PHP框架交流】 835人已围观
简介1.拉取nginx镜像dockerpullnginx 2.拉取php-fpm这里我就选择php7.4版本的了dockerpullphp:7.4-fpm 3.先运行nginx试试配置有没有啥问
1.拉取nginx镜像
docker pull nginx
2.拉取php-fpm 这里我就选择php7.4版本的了
docker pull php:7.4-fpm
3.先运行nginx试试配置有没有啥问题
docker run --name my-niginx -p 80:80 nginx
# 参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行
这里我已经执行过,应为第一次执行的时候端口被占用了。停掉被占用的80端口的lnmpdocker ps -a
查看所有的镜像
docker run -di --name=my-nginx -p 80:80 nginx
cedac583b76af99758e0d7919c6373a736d10a01dc3620a02f682de5b66c123c
启动镜像 查看镜像发现
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cedac583b76a nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 80/tcp my-nginx
执行命令 curl 127.0.0.1
[root@localhost ~]# curl 127.0.0.1
curl: (7) Failed connect to 127.0.0.1:80; 拒绝连接
[root@localhost ~]#
连接拒绝
进入容器再试试
[root@localhost ~]# docker exec -it cedac583b76a /bin/bash
root@cedac583b76a:/# curl 127.0.0.1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
容器内可以访问,证明配置有问题,容器内的80端口未和宿主机端口映射,配置容器端口80绑定宿主机80端口
[root@localhost ~]# docker container stop cedac583b76a
cedac583b76a
#停止删除容器
[root@localhost ~]# docker rm cedac583b76a
cedac583b76a
# 重新运行nginx
docker run -di --name=my-nginx -p 80:80 nginx
进入容器docker exec -it 501b79900a11 /bin/bash
创建目录作为网站的项目放置的位置 mkdir -p /www/wwwroot
退出容器 并将容器的的/www/wwwroot 挂载宿主机目录/www/wwwroot。
# 先退出宿主机 同样创建 /www/wwwroot 我之前装了lnmp所以是有这个目录的
mkdir -p /www/wwwroot
# 查看容器id
docker ps
停止容器
docker stop 501b79900a11
# 给容器增加挂载目录
docker run -v /www/wwwroot:/www/wwwroot --name=my-nginx -p 80:80 nginx
`
参考网上的方法,这里需要停止docker并关闭去修改配置文件?这个就极其不合理了,万一其他容器不能停止,关闭docker修改配置文件不就整个都瘫痪了吗。
利用docker run是新建一个docker容器,我运行报冲突了,创建新的容器运行当然也不对。
docker run --mount type=bind,source=/www/wwwroot,target=/www/wwwroot nginx --name=my-nginx
AI给的命令试了也不对,害,只能把原容器删除了,重新创建容器的时候就指定好目录映射了
docker run -di -v /www/wwwroot:/www/wwwroot --name=my-nginx -p 80:80 nginx
直接运行后发现容器里已经有了已经有了www/wwwroot这个目录,并且里面的内容正是我们的宿主机器上的内容。
3.接下来就是启动php-fpm 默认是9000的端口,这个不需要啥配置直接运行就可以。
docker run -di --name=my-php:7.4 -p 9000:9000 php:7.4-fpm
进入容器docker exec -it 10c04e294219 /bin/bash
进入目录/etc/nginx
我们查看配置文件cat nginx.conf
发现配置文件有导入include /etc/nginx/conf.d/*.conf;
下所有目录 我们只需再改目录创建并修改我们的网站配置文件就可以。发现容器里没有安装vi
bash: vi: command not found
好吧,那就再重新来 把nginx /etc/nginx/conf.d
这里我犯过错我想直接挂载容器内的nginx目录由于子目录的目录还有目录 挂载不成功那就直接挂载conf.d 成功。
# 停止删除之前的容器 重新运行一个nginx 容器 配置网站目录和nginx目录 方便管理我就随意放进www目录了
docker run -di -v /www/wwwroot:/www/wwwroot -v /www/etc/nginx/conf.d:/etc/nginx/conf.d -p 80:80 --name=my-nginx nginx
我们去phpstudy里面见一个网站,找到D:\phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts
复制里面的配置文件进行修改
server {
listen 80;
server_name helloworld.com;
root "/www/wwwroot/helloworld.com";
location / {
index index.php index.html error/index.html;
include /www/wwwroot/helloworld.com/nginx.htaccess;
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1: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;
}
}
去宿主机创建/www/wwwroot
创建helloworld.com
目录并在目录下建立 nginx.htaccess
文件
mkdir -p /www/wwwroot/helloworld.com
cd /www/wwwroot/helloworld.com
touch nginx.htaccess
# vim index.php
<?php
phpinfo();
然后进去nginx容器 重启nginx使配置生效
docker ps
docker exec -it e2fc1f23736e /bin/bash
# 再宿主机创建的文件容器内也是同步存在的
cat /etc/nginx/conf.d/helloworld.com.conf
# 检查配置文件是否正常
nginx -t
nginx -s reload
哈哈哈过不奇然,无法正常访问。普通的html是可以正常访问php文件报502,检查了下是127.0.0.1:9000的问题,容器的9000端口压根没有配置,转发过去当然无法处理。修改成宿主机ip 发现容器内压根无法访问到宿主机ip,还是看看人家怎么解决的吧。
docker run -di -v /www/wwwroot:/www/wwwroot
-v /www/etc/nginx/conf.d:/etc/nginx/conf.d
-v /www/var/log/nginx:/var/log/nginx
-p 80:80
--name=my-nginx nginx
--link my-php7.4:php7.4
—link: 把 my-php 容器的网络并入 nginx
注意:PHP和Nginx容器存放文件的目录必须一致,才能访问,不然会找不到文件。
然后我决定推到重做:
docker run -di --name=php7_4 -p 9000:9000 -v /www/wwwroot:/www/wwwroot php:7.4-fpm
docker run --name=my-nginx -p 80:80 \
-v /www/wwwroot:/www/wwwroot \
-v /www/etc/nginx/conf.d:/etc/nginx/conf.d \
-v /www/var/log/nginx:/var/log/nginx \
--link php7_4 -di nginx
宿主机已经绑定过容器的直接新建一个default.conf
server
{
listen 80;
#listen [::]:80;
server_name helloworld.com www.helloworld.com localhost;
index index.html index.htm index.php default.html default.htm default.php;
root /www/wwwroot/helloworld.com;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
location ~ \.php$ {
fastcgi_pass php7_4:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
}
php7_4这里是php宿主机的ip的别名
docker ps -a
docker exec -it 1a /bin/bash
cat /etc/hosts
#host的内容
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 php7_4 65faa49a6d3d
172.17.0.3 1afee67fe529
根据配置文件 我们去/www/wwwroot
建立一个 helloworld.com
目录,建立一个index.php
文件,里面<?php phpinfo();
保存。
然后去浏览器访问虚拟机宿主机的。能正常打印出php的信息就算成功了。
去host把虚拟机ipt填进去,增加一条记录192.168.160.133 helloworld.com
很赞哦! (0)
相关文章
随机图文
-
yii2 开启sql日志记录 log sql
我们在本地开发调试中经常回去看执行了哪些sql,有时通过模型构造器生成的sql并不是我们想要的,然而一条条的输出sql过于麻烦.比如可以echo News::find()->limit(1)->cre -
docker 部署thinkphp6 项目(strawberry) 基于官方镜像php nginx mysql部署
使用docker部署thinkphp6项目,这里采用php7.4+mysql5.7+nginx进行,每个服务为单独的一个容器,本人电脑不是专业版,采用centos虚拟机来运行docker,而非win -
ThinkPHP6.0 数据集
数据集模型的select查询方法返回数据集对象 think\model\Collection,该对象继承自think\Collection,因此具有数据库的数据集类的所有方法,而且还提供了额 -
php把对象foreach 循环 Iterator遍历对象 php进阶
php高级技术把一个对象foreach循环遍历,很多框架中都实现了Iterator 然后就可以foreach去遍历这个对象,下面简单尝试编写一个简单的demo去循环遍历对象. class A impl