# 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
(約2500字)
# 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
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
(約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
(約3500字)
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
; php.ini優化片段
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
(約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;
}
}
(約2000字)
docker network create lnmp-network
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字)
# MySQL備份示例
docker exec mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql
(約2000字)
# 基于server_name的虛擬主機
server {
listen 80;
server_name project1.test;
# ...其他配置
}
server {
listen 80;
server_name project2.test;
# ...其他配置
}
(約1500字)
services:
php:
deploy:
resources:
limits:
cpus: '2'
memory: 1G
opcache.validate_timestamps=60
opcache.revalidate_freq=0
(約1500字)
docker logs -f nginx-container
(約1000字)
(約1000字)
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萬字內容,每個章節需要進一步擴展技術細節、配置示例和原理說明。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。