1 创建桥接网络
docker network create phpClassExamples_network
2 安装nginx
2.1 生成nginx临时容器
docker run -it --name test_nginx -d nginx
查看临时容器内部,找到关键目录
1、工作目录:
ls usr/share/nginx/html
2、配置目录
ls etc/nginx/conf.d
3、日志目录
ls var/log/nginx
2.2 复制nginx关键目录
退出临时容器。创建宿主机目录
cd / ; \ mkdir myweb2 ; \ cd myweb2 ;\ mkdir {html,nginx,log,php} ; \ cd nginx ; \ mkdir conf.d ; \ cd /myweb2/php ; \ mkdir conf ; \ cd /myweb2/log ; \ mkdir nginx;
查看创建的目录结构
tree /myweb2
复制重要文件到宿主机
docker cp test_nginx:/usr/share/nginx/html /myweb2
docker cp test_nginx:/etc/nginx/conf.d /myweb2/nginx
如果不复制出来,配置文件会丢失 造成无法启动
然后卸磨杀驴,把这个测试容器删除
docker stop test_nginx
docker rm test_nginx
2.3 生成真正的nginx容器:phpClassicExamples_nginx
docker run \ --network phpClassExamples_network \ -p 8080:80 \ -p 443:443 \ --name phpClassicExamples_nginx \ --restart=always \ -v /myweb2/html:/usr/share/nginx/html \ -v /myweb2/nginx/conf.d:/etc/nginx/conf.d \ -v /myweb2/log/nginx:/var/log/nginx \ -d nginx:latest
备注:--restart=always 重启自动启动容器
8080 是宿主机端口;80是容器端口
443 用于https端口
容器名为 :phpClassicExamples_nginx
安装完即可访问静态网页
3 安装php容器
3.1 生成php临时容器
docker run -dit --name test_php php:7.4-fpm
查看临时容器内部,找到关键目录
/usr/loacl/etc 配置文件夹
/var/www/html 工作目录
3.2 复制php关键目录
把配置文件夹里的文件复制到宿主机目录 /myweb2/php/conf
docker cp test_php:/usr/local/etc /myweb2/php/conf
3.3 删除临时php容器
docker stop test_php
docker rm test_php
3.4 生成真正的php容器
docker run \ --network phpClassExamples_network \ -p 9001:9000 \ -itd --name phpClassicExamples_php \ -v /myweb2/html:/var/www/html \ -v /myweb2/php/conf:/usr/loacl/etc \ --restart=always \ php:7.4-fpm
3.5 安装php扩展
进入php容器
docker exec -it phpClassicExamples_php bash
安装扩展
docker-php-ext-install pdo pdo_mysql
3.6 简单配置
进入容器
locale
export LANG=en_US.UTF-8
编辑PHP.ini文件,设定默认字符集:
default_charset = "UTF-8"
4 配置nginx容器的default.conf文件
修改宿主机 /myweb2/nginx/conf.d\default.conf文件 ,
完整代码如下

server { listen 80; # 宿主机的端口 listen [::]:80; #server_name localhost; server_name 10.10.10.234 # 改成宿主机的ip #charset koi8-r; # 解决中文乱码 charset utf-8; # 解决中文路径乱码 source_charset utf-8;#实际并没有用 #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html;# nginx容器的工作目录(绝对路径) # index index.html index.htm; # 将中文路径转换为utf-8编码 # try_files $uri $uri/ /index.html?$args; # 以下三行为显示目录,相当于apache中的indexes autoindex on; # 开启目录浏览功能; autoindex_exact_size off; #关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b; autoindex_localtime on; #开启以服务器本地时区显示文件修改日期! } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; location = /50x.html { #root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # 与php-fpm通信的关键设置 location ~ \.php$ { root /var/www/html; #php容器工作目录 fastcgi_pass phpClassicExamples_php:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; #改成php容器的工作目录 include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
然后重启nginx服务器
docker restart phpClassicExamples_nginx phpClassicExamples_php
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人