温馨提示×

温馨提示×

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

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

Docker下如何部署lnmp

发布时间:2021-12-06 12:21:16 来源:亿速云 阅读:195 作者:小新 栏目:开发技术
# Docker下如何部署LNMP

## 目录
1. [前言](#前言)
2. [LNMP架构概述](#lnmp架构概述)
3. [Docker基础准备](#docker基础准备)
4. [部署MySQL容器](#部署mysql容器)
5. [部署PHP-FPM容器](#部署php-fpm容器)
6. [部署Nginx容器](#部署nginx容器)
7. [容器互联与网络配置](#容器互联与网络配置)
8. [数据持久化方案](#数据持久化方案)
9. [多项目环境配置](#多项目环境配置)
10. [性能优化建议](#性能优化建议)
11. [常见问题排查](#常见问题排查)
12. [安全加固措施](#安全加固措施)
13. [CI/CD集成](#cicd集成)
14. [总结](#总结)

## 前言
(约1500字)
- Docker的普及与优势
- LNMP传统部署痛点
- 容器化部署的价值
  - 环境一致性
  - 快速部署
  - 资源隔离
- 本文目标读者群体

## LNMP架构概述
(约2000字)
```mermaid
graph LR
    Client --> Nginx
    Nginx --> PHP
    PHP --> MySQL
  • 各组件功能解析
  • 传统部署与容器化对比
  • 流量处理流程详解
  • 版本选择建议(PHP7.48.x, MySQL5.78.0等)

Docker基础准备

(约2500字)

环境要求

  • 支持的操作系统
  • 硬件资源建议

Docker安装

# CentOS示例
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker

Docker Compose安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

核心概念

  • 镜像(Image)与容器(Container)
  • 数据卷(Volume)
  • 网络(Network)
  • Dockerfile最佳实践

部署MySQL容器

(约3000字)

官方镜像选择

docker pull mysql:8.0

启动命令详解

docker run -d \
  --name mysql8 \
  -e MYSQL_ROOT_PASSWORD=yourpassword \
  -e MYSQL_DATABASE=app_db \
  -e MYSQL_USER=app_user \
  -e MYSQL_PASSWORD=userpass \
  -v /data/mysql:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci

配置文件定制

# my.cnf示例
[mysqld]
innodb_buffer_pool_size = 1G
max_connections = 200

安全建议

  • 密码策略
  • 远程访问控制
  • 备份方案

部署PHP-FPM容器

(约3500字)

镜像选择比较

  • 官方镜像
  • webdevops/php-nginx
  • 自定义镜像构建

Dockerfile示例

FROM php:8.1-fpm

RUN apt-get update && \
    apt-get install -y \
        libzip-dev \
        libpng-dev \
        libjpeg-dev \
        libfreetype6-dev

RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
    docker-php-ext-install -j$(nproc) \
        gd \
        pdo_mysql \
        zip \
        opcache

COPY php.ini /usr/local/etc/php/conf.d/custom.ini

扩展安装指南

  • 常见扩展列表
  • Pecl安装方法
  • 性能相关扩展(OPcache等)

PHP配置优化

; php.ini优化片段
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000

部署Nginx容器

(约3000字)

基础配置

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;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

与PHP-FPM通信

  • Unix socket vs TCP
  • 健康检查配置
  • 静态资源缓存策略

HTTPS配置

  • Let’s Encrypt证书申请
  • HTTP/2启用
  • 安全头设置

容器互联与网络配置

(约2000字)

自定义网络创建

docker network create lnmp-network

Docker Compose完整示例

version: '3.8'

services:
  nginx:
    image: nginx:1.21
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./html:/var/www/html
    networks:
      - lnmp-net

  php:
    build: ./php
    volumes:
      - ./html:/var/www/html
    networks:
      - lnmp-net

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - lnmp-net

volumes:
  mysql-data:

networks:
  lnmp-net:
    driver: bridge

数据持久化方案

(约1500字)

数据卷类型对比

  • 绑定挂载(bind mount)
  • 命名卷(named volume)
  • 临时卷(tmpfs)

备份与恢复

# MySQL备份示例
docker exec mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

多项目环境配置

(约2000字)

多站点Nginx配置

# 基于server_name的虚拟主机
server {
    listen 80;
    server_name project1.test;
    # ...其他配置
}

server {
    listen 80;
    server_name project2.test;
    # ...其他配置
}

环境变量管理

  • .env文件使用
  • 不同环境配置切换

性能优化建议

(约1500字)

容器资源限制

services:
  php:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 1G

OPcache配置

opcache.validate_timestamps=60
opcache.revalidate_freq=0

常见问题排查

(约1500字)

日志查看方法

docker logs -f nginx-container

常见错误代码

  • 502 Bad Gateway
  • 连接数据库失败
  • 权限问题

安全加固措施

(约1000字)

最佳实践

  • 非root用户运行
  • 镜像签名验证
  • 定期更新策略

CI/CD集成

(约1000字)

GitHub Actions示例

name: Deploy LNMP

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: docker-compose up -d --build

总结

(约500字) - 方案优势总结 - 后续学习建议 - 社区资源推荐 “`

注:实际word计数会根据具体内容扩展调整,此处提供了完整的章节结构和部分内容示例。如需完整2万字内容,每个章节需要进一步扩展技术细节、配置示例和原理说明。

向AI问一下细节

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

AI