Docker Compose企业实战系列(一):LNMP环境一键部署(Nginx\+MySQL\+PHP)

Docker Compose企业实战系列(一):LNMP环境一键部署(Nginx+MySQL+PHP)

前言

前面 Docker 基础八篇系列 我们已经完整学完:容器原理、镜像构建、数据挂载、网络、Compose 基础编排、生产最佳实践。

理论学完,接下来进入企业落地实战阶段。

本系列主打:一篇一套真实可复用模板、开箱即用、生产级配置、无废话。

很多个人站长、小团队开发、测试环境,最常用的就是 LNMP 环境:Nginx + MySQL + PHP。

传统搭建 LNMP 耗时、环境容易脏、版本冲突、卸载不干净。用 Docker Compose 一键搭建,全程5分钟,环境纯净、可迁移、可销毁。

本篇给大家一套完整成型、可直接上线的 LNMP Compose 模板。

一、环境架构说明

本次搭建包含三大服务:

  • Nginx:静态资源服务、反向代理、入口服务

  • MySQL 8.0:数据库持久化存储

  • PHP-FPM 8.1:PHP 解析运行环境

所有服务统一组网、自动挂载目录、数据持久化、开机自启。

二、项目目录结构

先建好统一目录结构,规范整洁、方便后续维护:

plain 复制代码
lnmp-docker/
├── docker-compose.yml   # 核心编排文件
├── .env                 # 环境变量配置
├── nginx/
│   └── conf/            # Nginx配置挂载目录
├── www/                 # 网站根目录
└── mysql/
    └── data/            # 数据库数据持久化目录

三、编写环境变量 .env

在根目录新建 .env,统一管理密码、版本、端口,避免硬编码:

env 复制代码
# MySQL配置
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=default_db
MYSQL_USER=webuser
MYSQL_PASSWORD=web123456

# 镜像版本
MYSQL_VERSION=8.0
NGINX_VERSION=alpine
PHP_VERSION=8.1-fpm-alpine

四、核心 docker-compose.yml 完整配置

新建 docker-compose.yml,复制下面全套配置,直接可用:

yaml 复制代码
version: '3.8'

services:
  # Nginx服务
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - "80:80"
    volumes:
      - ./www:/usr/share/nginx/html
      - ./nginx/conf:/etc/nginx/conf.d
    depends_on:
      - php
    restart: always
    networks:
      - lnmp-net

  # PHP服务
  php:
    image: php:${PHP_VERSION}
    volumes:
      - ./www:/usr/share/nginx/html
    restart: always
    networks:
      - lnmp-net

  # MySQL服务
  mysql:
    image: mysql:${MYSQL_VERSION}
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    restart: always
    networks:
      - lnmp-net

# 自定义网络
networks:
  lnmp-net:
    driver: bridge

五、默认 Nginx 配置支持 PHP 解析

在 nginx/conf 目录新建 default.conf,解决 Nginx 不解析 PHP 的经典问题:

nginx 复制代码
server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.php;

    # 支持PHP解析
    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

六、测试 PHP 环境

在 www 目录新建 info.php

php 复制代码
<?php
phpinfo();
?>

七、一键启动 LNMP 环境

进入项目根目录,执行启动命令:

bash 复制代码
# 后台启动所有服务
docker compose up -d

查看服务状态:

bash 复制代码
docker compose ps

八、访问测试

  • 静态页面:http://localhost

  • PHP环境检测:http://localhost/info.php

能正常展示 PHP 信息,代表 Nginx + PHP 联动成功。

九、MySQL 连接测试

本地数据库工具直接连接:

  • 地址:服务器IP / localhost

  • 端口:3306

  • 账号:root / webuser

  • 密码:.env 文件中配置的密码

十、常用运维命令

bash 复制代码
# 查看日志
docker compose logs -f

# 重启单个服务
docker compose restart nginx

# 停止服务不删数据
docker compose stop

# 销毁容器网络(保留数据)
docker compose down

十一、本方案优势(对比传统搭建)

  • 环境纯净隔离:不污染宿主机系统

  • 一键迁移:换服务器直接拉目录启动即可

  • 数据持久化:删容器不丢数据库数据

  • 版本可控:PHP、MySQL 版本固定,不会乱升级

  • 开箱即用:新手5分钟搭建完整网站环境

本期总结

本篇我们完成了 Docker Compose 版本 LNMP 完整生产环境,彻底告别传统繁琐编译安装。

所有配置规范化:挂载配置、数据持久化、环境变量隔离、自定义网络、自动重启,完全满足个人建站、测试环境、小型生产环境使用。

下期预告

Docker Compose企业实战系列(二):SpringBoot+MySQL+Redis 后端项目完整部署

下一篇带你部署最常用的 Java 后端微服务整套环境,实现项目打包、容器运行、数据库联动、缓存联动一键部署。

相关推荐
波力海苔夹心脆67527 分钟前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
ClouGence2 小时前
数据如何随时可用?广西水牛先生的 MySQL 实时同步实践
数据库·mysql·数据分析
秦jh_3 小时前
【Docker】镜像、卷原理
运维·docker·容器
程序员老赵3 小时前
Docker 部署 XWiki:轻松搭建企业知识库与协作 Wiki
前端·docker·开源
I'mChloe3 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
李纲明4 小时前
WordPress 古腾堡点「更新」报「不是有效的 JSON 响应」:我按 REST 接口一路查下来的顺序
运维·nginx·php·wordpress·rest api
VX_bysjlw9854 小时前
基于协同过滤的美食推荐系统的设计与实现32221-计算机毕设原创(免费领源码+带部署教程)
java·spring boot·redis·mysql·tomcat·maven·mybatis
十碗饭吃不饱5 小时前
MySQL InnoDB RR 隔离下二级索引临键锁引发 INSERT 锁超时 全链路解析
java·数据库·mysql
Gh0st_Lx5 小时前
【2】MySQL 为什么使用 B+树
数据库·b树·mysql