如何使用 Docker Compose 部署 Nginx

 更新时间:2025年09月03日 10:27:03   作者:檀越@新空间  
本文系统介绍DockerCompose在容器编排中的核心优势及应用场景,涵盖安装配置、多环境管理、负载均衡、安全加固、生产实践、日志监控、故障排查与性能优化等,为高效部署与维护提供全面指南,感兴趣的朋友跟随小编一起看看吧

在现代应用部署中,容器编排工具已成为不可或缺的一部分。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 版本升级策略

  1. 备份现有配置和数据
  2. 修改 compose 文件中的镜像版本
  3. 分阶段滚动更新:
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker从零开始搭建、配置与深度理解 Nginx 服务(探索Nginx的旅程)

    Docker从零开始搭建、配置与深度理解 Nginx 服务(探索Nginx的旅程)

    文章介绍了Nginx的基本概念、安装配置、以及在CentOS和Ubuntu上的实战操作,通过本文的学习,读者可以掌握Nginx作为Web服务器和反向代理的使用,并能够解决常见问题,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Docker 安装Redis 无法使用配置文件设置密码问题及解决方法

    Docker 安装Redis 无法使用配置文件设置密码问题及解决方法

    最近开发需要使用各种组件,如果都到开发机上安装,会占用电脑资源较多,所以使用docker容器来安装这些组件,这篇文章主要介绍了Docker安装Redis无法使用配置文件设置密码问题,需要的朋友可以参考下
    2023-08-08
  • docker 启用多个端口映射命令的操作

    docker 启用多个端口映射命令的操作

    这篇文章主要介绍了docker 启用多个端口映射命令的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker运行镜像以及退出、删除容器的实现方式

    Docker运行镜像以及退出、删除容器的实现方式

    这篇文章主要介绍了Docker运行镜像以及退出、删除容器的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Docker使用Buildx多架构镜像构建指南

    Docker使用Buildx多架构镜像构建指南

    Docker Buildx支持多平台镜像构建,解决ARM/x86架构兼容性问题,提升部署效率,通过QEMU模拟与跨平台功能,实现一次构建多架构镜像,本指南将逐步介绍如何使用Buildx构建多架构镜像,并优化构建性能,感兴趣的朋友一起看看吧
    2025-08-08
  • docker安装jiacrontab可视化任务管理工具详解

    docker安装jiacrontab可视化任务管理工具详解

    jiacrontab 是基于 Web 的可视化定时任务管理工具,由 server(调度多 client)和 client(执行脚本)通过 RPC 通信构成,支持超时处理、并发控制、依赖管理及兼容 Linux crontab 格式,便于多服务器统一管理
    2025-07-07
  • Dockerfile命令参数的具体使用

    Dockerfile命令参数的具体使用

    Dockerfile是一个文本文件,包含用户构建镜像的所需要的全部命令,本文主要介绍了Dockerfile命令参数的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • docker-compose常见的参数命令详解

    docker-compose常见的参数命令详解

    Compose 是用于定义和运行多容器 Docker 应用程序的工具,下面这篇文章主要给大家介绍了关于docker-compose常见参数命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Docker中部署flink集群的两种方式

    Docker中部署flink集群的两种方式

    这篇文章主要介绍了Docker中部署flink集群的两种方式,本文将通过 2 种方式在 docker 中部署 flink standalone 集群,集群中共有 4 个节点,分别是 1 个 jobManager 节点和 3 个 taskManager 节点,需要的朋友可以参考下
    2024-02-02
  • docker-compose安装db2数据库操作

    docker-compose安装db2数据库操作

    这篇文章主要介绍了docker-compose安装db2数据库操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论