2026-02-27•ToolBox Team
Docker 与 Nginx - 构建现代应用的标准架构
📌 相关工具推荐 | Related Tool
🐳tools.dockerComposeVisualizerdockernginxdevopsdeployment
Docker 与 Nginx: 构建现代应用的标准架构
在当今的云计算时代,Docker 容器化和 Nginx 反向代理已成为现代应用部署的标准选择。无论是个人项目还是企业级应用,这套组合都能帮助我们快速、高效地部署和管理服务。
为什么选择 Docker + Nginx?
Docker 的核心优势
- 一致的环境:开发、测试、生产环境完全一致,消除"在我的电脑上没问题"的尴尬
- 快速部署:秒级启动,支持快速迭代
- 资源隔离:每个容器独立运行,互不影响
- 便捷扩展:水平扩展变得简单直观
Nginx 的核心价值
- 高性能:采用事件驱动架构,能处理数万并发连接
- 灵活配置:强大的反向代理和负载均衡能力
- 低内存占用:相比 Apache,内存占用减少 50%+
- 成熟稳定:被全球数百万网站信赖
快速开始:Docker + Nginx
1. 编写 Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
这个 Dockerfile 定义了:
- 基础镜像为 Node.js 18(Alpine 轻量版)
- 工作目录为
/app - 复制项目文件和安装依赖
- 暴露端口 3000
- 启动应用
2. Docker Compose 编排多个服务
version: '3.8'
services:
web:
build: .
container_name: my_app
ports:
- "3000:3000"
environment:
- NODE_ENV=production
networks:
- app_network
nginx:
image: nginx:alpine
container_name: my_nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- web
networks:
- app_network
networks:
app_network:
driver: bridge
这个配置:
- 定义 web 和 nginx 两个服务
- web 服务在内部 3000 端口运行
- nginx 监听外部 80/443 端口并转发到 web
- 通过
depends_on确保启动顺序
启动所有服务只需一条命令:
docker-compose up -d
3. Nginx 反向代理配置
upstream backend {
server web:3000;
}
server {
listen 80;
server_name yourdomain.com;
# 重定向 HTTP 到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass http://backend;
proxy_set_header Host $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;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 静态资源缓存
location /static/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
这个配置实现了:
- HTTP 自动重定向到 HTTPS
- SSL/TLS 加密传输
- 反向代理到后端应用
- WebSocket 支持
- 静态资源长期缓存
生产环境最佳实践
1. 健康检查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
2. 资源限制
services:
web:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
3. 日志管理
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
4. 环境分离
分别为开发、测试、生产环境维护不同的 docker-compose 配置:
docker-compose.yml- 本地开发docker-compose.prod.yml- 生产环境
常见问题排查
容器间通信失败
问题:Nginx 无法连接到 web 应用
解决:确保使用正确的服务名称(如 web:3000),而非 localhost:3000
SSL 证书配置报错
问题:SSL_ERROR_BAD_CERT_DOMAIN
解决:使用 SSL/TLS 证书检查工具 验证证书的有效性和域名匹配
容器频繁重启
问题:Docker 容器运行数秒后自动退出
解决:检查 entrypoint 是否正确,确保主进程不会立即退出
扩展建议
- 负载均衡:使用多个 web 容器,nginx 在它们之间分配流量
- 持久化:将数据库、缓存分离到独立容器
- 监控告警:集成 Prometheus + Grafana 监控容器状态
- 自动化部署:使用 CI/CD(如 GitHub Actions)自动构建和推送镜像
Docker 与 Nginx 的组合为我们提供了强大而灵活的部署方案。掌握这套技能,将大幅提升您的开发效率和系统的可靠性。
相关工具推荐: