Docker 部署 Nginx 和 MySQL 应用实战指南:从环境搭建到性能优化
Docker 作为一种流行的容器化技术,已经广泛应用于各种项目的部署和运行中。本文将详细介绍如何使用 Docker 成功部署 Nginx 和 MySQL 应用,涵盖环境搭建、配置优化、故障排查等实用内容,帮助读者快速掌握 Docker 部署的核心技能。
一、Docker 基础环境准备
在开始部署 Nginx 和 MySQL 之前,首先需要确保本地已经安装了 Docker环境和Docker Compose。以下是详细的准备工作:
1.1 Docker 安装与配置
对于 Ubuntu 系统,可以使用以下命令安装 Docker:
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable 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
sudo systemctl enable docker
安装完成后,可以通过以下命令验证 Docker 版本:
docker --version
1.2 Docker Compose 安装
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具, recommand 版本为 v3.x:
sudo curl -L "https://github.com/docker/compose/releases/download/v3.8.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
二、Nginx 与 MySQL 的 Docker 镜像选择
2.1 Nginx 镜像
官方 Nginx 镜像是建议的首选:
docker pull nginx:latest
此外,还有一些带特殊配置的镜像可供选择:
nginx:stable: 稳定版nginx:alpine: 小巧版(仅 5MB)nginx:1.18: 特定版本
2.2 MySQL 镜像
官方 MySQL 镜像提供多种版本:
docker pull mysql:latest
根据实际需求,可以选择:
mysql:5.7: 某个稳定版本mysql:8.0: 最新版本mysql:8.0.25:特定版本
三、使用 Docker Compose 定义 Nginx 与 MySQL 服务
3.1 创建项目文件夹结构
mkdir nginx-mysql-docker
cd nginx-mysql-docker
mkdir docker-compose.yml
3.2 编写 docker-compose.yml 文件
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
restart: unless-stopped
networks:
- app_network
mysql:
image: mysql:8.0
container_name: mysql_instance
environment:
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: your_database_name
MYSQL_USER: your_database_user
MYSQL_PASSWORD: your_user_password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql.cnf:/etc/mysql/my.cnf
restart: unless-stopped
networks:
- app_network
networks:
app_network:
driver: bridge
volumes:
mysql_data:
3.3 Nginx 配置示例 (nginx.conf)
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
四、Nginx 与 MySQL 的集成配置
4.1 配置 Nginx 反向代理 MySQL 管理页面
server {
listen 80;
server_name db admin;
location / {
proxy_pass http://mysql:3306/phpmyadmin/;
include proxy_params;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4.2 如此配置优化 Nginx 性能
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_set_header Cache-Control "";
add_header Cache-Control "public";
}
五、项目管理与维护
5.1 日志监控与管理
为了方便查看容器日志,可以通过以下命令优雅地查看日志:
docker-compose logs -f nginx
docker-compose logs -f mysql
5.2 备份与恢复策略
对于 MySQL 数据的备份,可以采用以下方案:
- 每日自动备份
- 使用 Docker 卷快照
- 将数据卷挂载到宿主机进行备份
5.3 常见问题解决
- Nginx 502 Bad Gateway:检查 php-fpm 是否运行正常
- MySQL 连接超时:检查网络配置和防火墙设置
- Docker 卷损坏:使用
docker system prune清理无效卷
六、性能优化实践
6.1 Nginx 性能调优参数
worker_processes auto; # CPU 核心数
events { worker_connections 4096; } # 每个工作进程最大连接数
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
...
}
}
6.2 MySQL 性能优化
[mysqld]
innodb_buffer_pool_size = 512M # MySQL 最大缓存
max_connections = 150 # 最大连接数
query_cache_size = 0 # 禁用查询缓存
log_queries_not_distinct = 1 # 记录非唯一查询
七、生产环境部署注意事项
- 建议使用 Docker Swarm 或 Kubernetes 进行集群管理
- 配置 HTTPS,使用letsencrypt免费证书
- 设置异地多副本备份
- 使用 Docker 动态网络实现端口隔离
- 建立完整的监控体系
八、总结与展望
通过 Docker 部署 Nginx 和 MySQL,可以极大简化应用程序环境的一致性问题,提高开发和运维效率。随着 Docker 技术的不断成熟,未来将会有更多高级特性支持,例如:服务发现、配置管理、自动扩缩容等。
对于初学者,建议从简单的单容器部署开始,逐步掌握多容器协作和复杂场景的解决方案。不断实践和总结,才能真正驾驭 Docker 这一强大工具。
希望本文的详细步骤和优化建议能帮助您顺利完成 Nginx 和 MySQL 的 Docker 部署,并在实际工作中发挥出其强大的性能优势。随着容器化技术的深入发展,相信在不久的将来会有更多创新的部署方案涌现,等待我们去探索和实践。


AI 助手2 天前
发表在:欢迎使用emlog感谢您的分享!很高兴看到大家对工业3D...
AI 助手5 天前
发表在:欢迎使用emlog感谢分享!您的观点很独特,听起来像是一...
AI 助手6 天前
发表在:欢迎使用emlog非常感谢您的分享!3D сканеры...
AI 助手9 天前
发表在:欢迎使用emlog非常感谢您的分享!听起来3D金属打印技...
AI 助手10 天前
发表在:欢迎使用emlog谢谢分享!WMS系统确实能提升仓储效率...
AI 助手11 天前
发表在:欢迎使用emlog谢谢分享这些有价值的建议!希望您的3D...
主机评测博客14 天前
发表在:内存卡损坏数据恢复的7个方法(内存卡读不出修复)https://www.88993.cn...
emlog14 天前
发表在:欢迎使用emlog这是系统生成的演示评论