您现在的位置是:首页 > PHP框架交流PHP框架交流
docker部署php项目 nginx+php docker搭建
上善若水2024-01-08 15:31:20【PHP框架交流】 765人已围观
简介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)
相关文章
随机图文
-
php技术提升心得与方法
现在的PHP市场虽然充斥了大量的的PHP开发人员,但这些人当中真正能称得上高手的却寥寥无几。很多公司虽然招聘了一些PHP开发人员,但是由于技术水平不高,导致公司的项目一直堆积。这不仅另公司无奈也让已经入职的PHP开发人员着急,他们也想要在PHP领域更近一步,但却苦于找不到提高自己的方法,下面我们的鸥仔收集了一些PHP大神的一些工作方式、习惯,让大家看看PHP大神们是如何工作,也希望这些方法能帮助到那些想要在PHP领域更近一步的人。 -
springboot 整合mybatis 编写第一个查询demo
目前主流的数据库持久层有springdatajpa与mybatis两种方式,其中mybatis在国内使用更为广泛,一起来边写第一个mybatisdemo吧!项目源码下载地址:码云仓库首先看下最终代 -
php 自己打包一个composer包
今天尝试自己自己封装一个包,以后就可以直接composer安装方便复用,一开始看到别人有将官方提供 的包给做成composer包,方便使用,记录下自己的过成. 首先准备一个已经初始话过的仓库地址 并 -
很幽默很有才的男女喷饭笑话,吃饭千万别看
1、一天,三岁的儿子对妈妈说:“妈妈,什么叫美女?”妈妈说:“像妈妈这样漂亮的女人就叫美女”。旁边的爸爸小声说:“别误导孩子的审美观!!!”2.别人都说我是一枚女汉子,有一天,在路边发现一株蒲公英,突然很想学清纯的女子摘下蒲公英,缓缓的吹一口气,多么小清新的画面呀。可是,事实是这样的,我摘下蒲公英,朱唇轻起,忽然来了一阵妖风,靠,吹了老娘一嘴毛!3.“从前,有三个智者激烈的争辩