前言
在现代化应用开发中,Docker已经成为标配。但很多开发者仍然停留在”能跑起来”的阶段,缺乏生产级的配置经验。本文将手把手教你使用Docker Compose编排Nginx、MySQL、Redis,并附带完整的生产环境配置方案。
一、项目结构规划
良好的目录结构是成功的一半。我们采用以下结构:
mkdir -p ~/docker-lnmp/{nginx,mysql,redis,app,logs}
cd ~/docker-lnmp
tree -L 2
二、编写Docker Compose配置
2.1 基础版本(开发环境)
version: '3.8'
services:
nginx:
image: nginx:1.25-alpine
container_name: lnmp-nginx
ports:
- "80:80"
- "443:443"
三、Nginx配置实战
3.1 基础PHP站点配置
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
}
四、PHP容器自定义扩展
FROM php:8.2-fpm-alpine
RUN apk add --no-cache freetype libjpeg-turbo libpng
RUN docker-php-ext-install gd pdo_mysql mysqli zip
RUN pecl install redis-6.0.2 && docker-php-ext-enable redis
五、MySQL初始化脚本
CREATE DATABASE IF NOT EXISTS app_db;
USE app_db;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE
);
六、Redis配置优化
bind 0.0.0.0
port 6379
requirepass YourRedisPasswordHere
appendonly yes
maxmemory 512mb
maxmemory-policy allkeys-lru
七、一键启动脚本
#!/bin/bash
set -e
echo "开始部署LNMP+Redis环境..."
mkdir -p {nginx/conf.d,php,app,mysql/data,redis/data,logs}
docker-compose pull
docker-compose up -d
echo "部署完成!"
八、日常运维命令
docker-compose ps
docker-compose logs -f
docker-compose exec mysql mysql -uroot -p
docker-compose exec redis redis-cli PING
九、性能压测对比
ab -n 10000 -c 100 http://localhost/
wrk -t12 -c400 -d30s http://localhost/
十、常见问题排查
10.1 容器无法启动
docker logs lnmp-nginx
docker inspect lnmp-nginx
netstat -tlnp | grep 80
10.2 PHP连接MySQL失败
getMessage();
}
?>
注意:在Docker网络中,容器之间使用服务名(如mysql、redis)作为hostname,而不是localhost或127.0.0.1。
总结
本文从零到一搭建了生产级Docker LNMP+Redis环境,涵盖了:
- 基础编排:Docker Compose多服务编排
- 生产加固:健康检查、资源限制、Secrets管理
- 配置优化:Nginx SSL、PHP扩展、MySQL索引、Redis持久化
- 运维工具:一键部署脚本、备份恢复、性能压测
实际部署时请根据业务需求调整资源配置,并定期更新镜像以修复安全漏洞。
下期预告:Git协作与GitHub Actions CI/CD(周三主题),我们将实现代码提交后自动部署到Docker环境!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















暂无评论内容