温馨提示×

LNMP环境下如何使用Docker部署

小樊
54
2025-09-24 19:45:38
栏目: 智能运维

LNMP环境下使用Docker部署指南

1. 环境准备

在开始部署前,需确保系统已安装DockerDocker Compose(用于管理多容器服务)。安装步骤如下(以CentOS为例):

  • 安装Docker
    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  # 开机自启动
    
  • 安装Docker Compose
    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

2. 拉取官方镜像

选择轻量、稳定的官方镜像,减少自定义配置工作量:

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-fpmmysql:8)。

3. 创建Docker网络

为了让Nginx、PHP、MySQL容器能互相通信,需创建一个自定义Docker网络:

docker network create lnmp_net

所有容器启动时需加入该网络(--network lnmp_net)。

4. 配置数据卷(持久化数据)

将容器内的数据映射到宿主机,避免容器删除后数据丢失:

  • Nginx:映射配置文件(conf.d)和网站根目录(html);
  • MySQL:映射数据目录(data);
  • PHP:映射网站根目录(html)。
    示例目录结构:
lnmp_docker/
├── nginx/
│   ├── conf.d/         # Nginx配置文件(如default.conf)
│   └── html/           # 网站静态文件
├── mysql/
│   └── data/           # MySQL数据存储
└── php/
    └── src/            # PHP项目文件(如index.php)

5. 配置Nginx

  • 创建Nginx配置文件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;
        }
    }
    
  • 启动Nginx容器
    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
    

6. 配置MySQL

  • 启动MySQL容器(设置root密码和数据库):
    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为必填项,其他参数可选。

7. 配置PHP-FPM

  • 启动PHP容器(挂载项目代码目录):
    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挂载。

8. 测试PHP运行

  • /path/to/lnmp_docker/php/src目录下创建index.php
    <?php phpinfo(); ?>
    
  • 访问http://服务器IP,若看到PHP信息页面,说明LNMP环境部署成功。

9. 使用Docker Compose优化管理(可选但推荐)

若需简化多容器启动流程,可使用docker-compose.yml统一管理:

  • 创建docker-compose.ymllnmp_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 down
    • 查看日志:docker-compose logs -f nginx(查看Nginx日志)
    • 进入容器:docker-compose exec php bash(进入PHP容器)

注意事项

  • 权限问题:确保宿主机挂载目录的权限允许容器用户(如www-data)访问;
  • 版本兼容:Nginx、PHP、MySQL版本需兼容(如PHP 7.4需对应Nginx 1.18+);
  • 安全加固:生产环境中,建议关闭MySQL的远程访问、修改Nginx默认配置、定期备份数据。

0