Docker中怎么部署LNMP服务器环境

发布时间:2022-02-16 15:23:30 作者:iii
来源:亿速云 阅读:115
# Docker中怎么部署LNMP服务器环境

## 前言

在当今的Web开发领域,LNMP(Linux + Nginx + MySQL + PHP)是一种非常流行的服务器环境组合。随着容器化技术的普及,使用Docker部署LNMP环境可以带来诸多优势:

- **环境隔离**:每个服务运行在独立的容器中
- **快速部署**:通过镜像快速搭建完整环境
- **版本控制**:方便管理不同版本的服务组件
- **资源高效**:相比传统虚拟机更节省资源

本文将详细介绍如何使用Docker部署LNMP环境,包括基础配置、容器编排和优化技巧。

## 一、准备工作

### 1.1 安装Docker和Docker Compose

在开始前,请确保系统已安装以下工具:

```bash
# 安装Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

1.2 创建项目目录

建议为LNMP项目创建独立目录结构:

mkdir -p lnmp-docker/{nginx,php,mysql,wwwroot}
cd lnmp-docker

二、配置各服务容器

2.1 MySQL容器配置

创建MySQL配置文件 mysql/my.cnf:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

docker-compose.yml中添加MySQL服务:

services:
  mysql:
    image: mysql:8.0
    container_name: lnmp-mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_secure_password
      MYSQL_DATABASE: app_db
      MYSQL_USER: db_user
      MYSQL_PASSWORD: user_password
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - "3306:3306"
    networks:
      - lnmp-network
    restart: unless-stopped

2.2 PHP容器配置

创建PHP配置文件 php/php.ini:

[PHP]
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 256M
date.timezone = Asia/Shanghai

docker-compose.yml中添加PHP-FPM服务:

php:
  image: php:8.2-fpm
  container_name: lnmp-php
  volumes:
    - ./wwwroot:/var/www/html
    - ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini
  networks:
    - lnmp-network
  depends_on:
    - mysql
  restart: unless-stopped

2.3 Nginx容器配置

创建Nginx配置文件 nginx/default.conf:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

docker-compose.yml中添加Nginx服务:

nginx:
  image: nginx:alpine
  container_name: lnmp-nginx
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./wwwroot:/var/www/html
    - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
  networks:
    - lnmp-network
  depends_on:
    - php
  restart: unless-stopped

2.4 网络配置

docker-compose.yml中添加网络定义:

networks:
  lnmp-network:
    driver: bridge

三、启动LNMP环境

3.1 启动所有服务

docker-compose up -d

3.2 验证服务状态

检查容器是否正常运行:

docker-compose ps

3.3 测试PHP连接MySQL

wwwroot目录创建测试文件test_db.php:

<?php
$host = 'mysql';
$user = 'db_user';
$pass = 'user_password';
$db = 'app_db';

try {
    $conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
    echo "MySQL连接成功!";
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
?>

访问 http://localhost/test_db.php 测试连接。

四、高级配置与优化

4.1 使用自定义Docker镜像

对于PHP,可以创建包含扩展的自定义镜像:

# php/Dockerfile
FROM php:8.2-fpm

RUN apt-get update && apt-get install -y \
    libzip-dev \
    libpng-dev \
    && docker-php-ext-install pdo_mysql zip gd

然后在docker-compose.yml中修改PHP服务:

php:
  build: ./php
  # 其余配置保持不变...

4.2 配置PHP Opcache

php/php.ini中添加:

[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

4.3 Nginx性能调优

更新nginx/default.conf中的worker配置:

worker_processes auto;
events {
    worker_connections 1024;
    multi_accept on;
}

4.4 数据库持久化与备份

确保MySQL数据卷已配置:

volumes:
  - ./mysql/data:/var/lib/mysql

定期备份命令:

docker exec lnmp-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

五、常见问题解决

5.1 容器间网络连接问题

确保: - 所有服务使用相同网络 - 使用服务名而非IP进行连接 - 检查depends_on配置

5.2 文件权限问题

处理PHP文件写入权限:

docker exec -it lnmp-php chown -R www-data:www-data /var/www/html

5.3 性能瓶颈排查

使用命令监控资源使用:

docker stats

六、安全配置建议

6.1 MySQL安全

6.2 Nginx安全

添加基础认证:

location /admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

6.3 PHP安全

禁用危险函数:

disable_functions = exec,passthru,shell_exec,system

七、部署实际应用

以WordPress为例:

  1. 下载WordPress到wwwroot
  2. 修改wp-config.php中的数据库配置
  3. 确保文件权限正确

结语

通过Docker部署LNMP环境,我们实现了: - 服务隔离与独立管理 - 快速环境复制与迁移 - 灵活的版本控制 - 资源的高效利用

建议进一步探索: - 使用Docker Swarm或Kubernetes编排集群 - 实现CI/CD自动化部署 - 配置ELK日志收集系统

完整的docker-compose.yml示例:

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: lnmp-nginx
    ports:
      - "80:80"
    volumes:
      - ./wwwroot:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - lnmp-network
    depends_on:
      - php
    restart: unless-stopped

  php:
    build: ./php
    container_name: lnmp-php
    volumes:
      - ./wwwroot:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini
    networks:
      - lnmp-network
    depends_on:
      - mysql
    restart: unless-stopped

  mysql:
    image: mysql:8.0
    container_name: lnmp-mysql
    environment:
      MYSQL_ROOT_PASSWORD: secure_root_password
      MYSQL_DATABASE: app_db
      MYSQL_USER: db_user
      MYSQL_PASSWORD: user_password
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    networks:
      - lnmp-network
    restart: unless-stopped

networks:
  lnmp-network:
    driver: bridge

希望本指南能帮助您顺利搭建Docker化的LNMP环境! “`

推荐阅读:
  1. docker部署lnmp集群
  2. docker-compose部署LNMP

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker lnmp

上一篇:Docker的引擎Swarm怎么用

下一篇:怎么在Docker中使用R语言

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》