使用Docker Compose部署Nginx的详细教程
作者:Kwan的解忧杂货铺
在现代应用部署中,容器编排工具已成为不可或缺的一部分,Docker Compose 作为 Docker 官方的单机编排工具,通过声明式的 YAML 文件简化了多容器应用的管理,下面我们就来看看如何使用Docker Compose部署Nginx吧
在现代应用部署中,容器编排工具已成为不可或缺的一部分。Docker Compose 作为 Docker 官方的单机编排工具,通过声明式的 YAML 文件简化了多容器应用的管理。
一、Docker Compose 核心优势
1.1 与传统 Docker run 的对比
Docker Compose 相比直接使用docker run命令具有显著优势:
声明式配置:所有服务参数集中定义在 docker-compose.yml 文件中
依赖管理:自动处理服务启动顺序和网络连接
环境隔离:支持为不同环境(开发/测试/生产)定义独立配置
一键操作:简化多容器应用的启动、停止和重建流程
1.2 典型应用场景
开发环境快速搭建
微服务架构本地测试
CI/CD 流水线中的集成测试
中小规模生产部署
二、环境准备与安装
2.1 Docker Compose 安装
在 Linux 系统上安装最新版本:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version # 输出应类似:Docker Compose version v2.20.3
2.2 项目目录结构
推荐的标准目录布局:
nginx-project/ ├── docker-compose.yml ├── config/ │ ├── nginx.conf │ └── conf.d/ │ └── app.conf ├── html/ │ └── index.html └── logs/ ├── access.log └── error.log
三、基础部署实战
3.1 最小化 docker-compose.yml
version: "3.8" services: web: image: nginx:1.23-alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html restart: unless-stopped
启动服务:
docker-compose up -d
3.2 完整功能配置示例
version: "3.8" services: nginx: image: nginx:1.23-alpine container_name: production_nginx ports: - "80:80" - "443:443" volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf:ro - ./config/conf.d:/etc/nginx/conf.d - ./html:/usr/share/nginx/html - ./logs:/var/log/nginx - ./certs:/etc/ssl/certs environment: - TZ=Asia/Shanghai - NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx/conf.d networks: - frontend deploy: resources: limits: cpus: "1.5" memory: 512M healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 3s retries: 3 networks: frontend: driver: bridge attachable: true
四、高级配置技巧
4.1 多环境配置管理
使用 extends 和多个 compose 文件实现环境差异化:
base-compose.yml:
services: nginx: image: nginx:${NGINX_VERSION:-1.23-alpine} volumes: - ${CONFIG_PATH:-./config}:/etc/nginx
docker-compose.prod.yml:
version: "3.8" services: nginx: extends: file: base-compose.yml service: nginx environment: - NGINX_ENV=production deploy: replicas: 3
启动生产环境:
docker-compose -f base-compose.yml -f docker-compose.prod.yml up -d
4.2 负载均衡配置
部署 Nginx+PHP-FPM 集群示例:
services: nginx: image: nginx:1.23-alpine depends_on: - php volumes: - ./nginx.conf:/etc/nginx/nginx.conf php: image: php:8.2-fpm deploy: replicas: 3 volumes: - ./php:/var/www/html redis: image: redis:7-alpine
4.3 动态配置生成
结合 envsubst 实现模板化配置:
services: nginx: environment: - BACKEND_SERVER=app:8080 volumes: - ./templates/upstream.conf.template:/etc/nginx/templates/upstream.conf.template
模板文件示例:
upstream backend { server ${BACKEND_SERVER}; }
五、安全加固方案
5.1 非 root 用户运行
services: nginx: user: "1000:1000" cap_drop: - ALL cap_add: - NET_BIND_SERVICE
5.2 网络安全隔离
networks: frontend: internal: false backend: internal: true services: nginx: networks: - frontend - backend database: networks: - backend
5.3 镜像签名验证
services: nginx: image: nginx@sha256:abc123... platform: linux/amd64
六、生产环境最佳实践
6.1 日志管理方案
services: nginx: logging: driver: "json-file" options: max-size: "10m" max-file: "3" compress: "true"
6.2 监控集成
Prometheus 监控配置示例:
services: nginx: labels: - "prometheus.scrape=true" - "prometheus.port=9113" volumes: - ./nginx-prometheus.conf:/etc/nginx/conf.d/prometheus.conf prometheus: image: prom/prometheus ports: - "9090:9090"
6.3 蓝绿部署实现
services: nginx: deploy: update_config: parallelism: 2 delay: 10s order: start-first healthcheck: test: ["CMD-SHELL", "curl -sf http://localhost/health || exit 1"]
七、故障排查与维护
7.1 常用诊断命令
查看服务状态:
docker-compose ps docker-compose top
实时日志监控:
docker-compose logs -f --tail=100
进入容器调试:
docker-compose exec nginx sh
7.2 配置验证流程
# 检查语法 docker-compose config # 试运行 docker-compose up --dry-run # 重建服务 docker-compose up -d --force-recreate
7.3 版本升级策略
备份现有配置和数据
修改 compose 文件中的镜像版本
分阶段滚动更新:
docker-compose pull docker-compose up -d --no-deps nginx
八、性能优化建议
8.1 资源限制配置
services: nginx: deploy: resources: limits: cpus: "2" memory: 1G reservations: memory: 512M
8.2 静态资源缓存
优化后的 Nginx 配置:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 1y; add_header Cache-Control "public"; access_log off; }
8.3 连接参数调优
environment: - NGINX_WORKER_PROCESSES=auto - NGINX_WORKER_CONNECTIONS=4096 - NGINX_KEEPALIVE_TIMEOUT=65
到此这篇关于使用Docker Compose部署Nginx的详细教程的文章就介绍到这了,更多相关Docker Compose部署Nginx内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!