在开始部署前,需确保系统已安装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)访问;