在开始部署前,需确保系统已安装Docker和Docker Compose(用于管理多容器服务)。安装步骤如下(以CentOS为例):
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
sudo systemctl enable --now docker # 开机自启动
curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
验证安装:docker-compose --version。选择轻量、稳定的官方镜像,减少自定义配置工作量:
docker pull nginx:alpine # Nginx(Alpine版本更小)
docker pull mysql:5.7 # MySQL(推荐5.7或8.0)
docker pull php:7.4-fpm-alpine # PHP-FPM(Alpine版本,兼容性好)
注:可根据需求替换为其他版本(如
php:8.2-fpm、mysql:8)。
为了让Nginx、PHP、MySQL容器能互相通信,需创建一个自定义Docker网络:
docker network create lnmp_net
所有容器启动时需加入该网络(--network lnmp_net)。
将容器内的数据映射到宿主机,避免容器删除后数据丢失:
conf.d)和网站根目录(html);data);html)。lnmp_docker/
├── nginx/
│ ├── conf.d/ # Nginx配置文件(如default.conf)
│ └── html/ # 网站静态文件
├── mysql/
│ └── data/ # MySQL数据存储
└── php/
└── src/ # PHP项目文件(如index.php)
lnmp_docker/nginx/conf.d/default.conf):server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
# PHP处理规则(关键:将PHP请求转发到PHP容器)
location ~ \.php$ {
fastcgi_pass php:9000; # PHP容器的服务名(docker-compose中定义)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
docker run -d \
--name nginx \
--network lnmp_net \
-p 80:80 \
-v /path/to/lnmp_docker/nginx/html:/usr/share/nginx/html:ro \ # 只读挂载,防止篡改
-v /path/to/lnmp_docker/nginx/conf.d:/etc/nginx/conf.d:ro \
nginx:alpine
docker run -d \
--name mysql \
--network lnmp_net \
-e MYSQL_ROOT_PASSWORD=your_root_password \ # root密码
-e MYSQL_DATABASE=test_db \ # 创建默认数据库
-e MYSQL_USER=test_user \ # 创建普通用户
-e MYSQL_PASSWORD=test_password \ # 普通用户密码
-v /path/to/lnmp_docker/mysql/data:/var/lib/mysql \
mysql:5.7
注:
MYSQL_ROOT_PASSWORD为必填项,其他参数可选。
docker run -d \
--name php \
--network lnmp_net \
-v /path/to/lnmp_docker/php/src:/var/www/html \ # 挂载PHP项目
php:7.4-fpm-alpine
注:若需自定义PHP配置(如开启
mysqli扩展),可复制官方镜像的php.ini到宿主机,通过-v挂载。
/path/to/lnmp_docker/php/src目录下创建index.php:<?php phpinfo(); ?>
http://服务器IP,若看到PHP信息页面,说明LNMP环境部署成功。若需简化多容器启动流程,可使用docker-compose.yml统一管理:
docker-compose.yml(lnmp_docker/docker-compose.yml):version: '3'
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx/html:/usr/share/nginx/html:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
networks:
- lnmp_net
depends_on:
- php
- mysql
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: test_db
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
volumes:
- ./mysql/data:/var/lib/mysql
networks:
- lnmp_net
php:
image: php:7.4-fpm-alpine
container_name: php
volumes:
- ./php/src:/var/www/html
networks:
- lnmp_net
networks:
lnmp_net:
driver: bridge
cd /path/to/lnmp_docker
docker-compose up -d # 后台启动所有服务
docker-compose downdocker-compose logs -f nginx(查看Nginx日志)docker-compose exec php bash(进入PHP容器)www-data)访问;