环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始

来源:互联网 时间:2026-08-30

 传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上docker compose up一条命令,几分钟恢复原样。

核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录)。站长最该关心的卷——数据库文件、网站根目录必须挂在宿主机上,容器随时可以删了重建,数据不动。

# 目录结构
/webapp
├── docker-compose.yml
├── nginx/conf.d/site.conf
├── html/ # 网站根目录(卷)
└── mysql/ # 数据目录(卷)

# docker-compose.yml
services:
nginx:
image: nginx:1.26-alpine
ports: ["80:80", "443:443"]
volumes:
- ./html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
php:
image: php:8.2-fpm
volumes:
- ./html:/usr/share/nginx/html
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 改成强密码
volumes:
- ./mysql:/var/lib/mysql

Nginx容器里PHP的转发地址写容器名而不是127.0.0.1,这是新手第一大坑。容器里的localhost是容器自己,不是宿主机。Docker自带DNS,直接写 fastcgi_pass php:9000; 就通。

# nginx/conf.d/site.conf
server {
listen 80;
root /usr/share/nginx/html;
location ~ \.php$ {
fastcgi_pass php:9000; # 写服务名,不是127.0.0.1
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

验证:docker compose up -d 之后,docker compose ps看三个容器都是running,浏览器访问出phpinfo页面。故意docker compose down再up,网站和数据库数据都在,就说明卷挂载没问题。

提醒两点:一是MySQL容器首次初始化后,root密码改环境变量不会生效,要进容器里改;二是别用latest标签,PHP 5.x老站选对应版本镜像,一个站一个compose目录,互不干扰。整套文件扔进git,服务器就算没了,环境也能原样复活。

数据来源:Docker官方文档 

相关文章

标签:

A5创业网 版权所有