你好、Docker
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
  • Docker部署Nginx指南

Docker 部署 Nginx 指南

基本介绍

Nginx 是一个高性能的 HTTP 和反向代理服务器。通过 Docker 部署 Nginx 可以快速搭建 Web 服务器环境,实现静态网站托管、负载均衡等功能。

环境要求

  • Docker Engine 已安装(版本 20.10.0 或更高)
  • 基本的 Docker 命令使用经验
  • 对 Nginx 配置有基本了解

基础部署

1. 创建项目结构

# 创建项目目录
mkdir nginx-docker
cd nginx-docker

# 创建必要的子目录
mkdir -p html conf.d

2. 准备网站文件

在 html 目录下创建一个示例 index.html:

<!DOCTYPE html>
<html>
<head>
    <title>Welcome to Nginx on Docker!</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 40px auto;
            max-width: 800px;
            padding: 20px;
        }
    </style>
</head>
<body>
    <h1>Welcome to Nginx on Docker!</h1>
    <p>If you see this page, the Nginx web server is successfully installed and working.</p>
</body>
</html>

3. 创建 Nginx 配置文件

在 conf.d 目录下创建 default.conf:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

4. 编写 Dockerfile

在项目根目录创建 Dockerfile:

# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:alpine

# 将自定义的 Nginx 配置文件复制到容器中
COPY conf.d/default.conf /etc/nginx/conf.d/default.conf

# 将网站文件复制到容器中
COPY html /usr/share/nginx/html

# 暴露 80 端口
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

5. 构建镜像

# 构建 Docker 镜像
docker build -t my-nginx .

6. 运行容器

# 运行 Nginx 容器
docker run -d -p 80:80 --name nginx-server my-nginx

现在可以通过访问 http://localhost 来查看网站。

高级配置

1. 使用数据卷

为了方便管理配置文件和网站内容,可以使用数据卷:

# 使用数据卷运行容器
docker run -d \
  -p 80:80 \
  -v $(pwd)/html:/usr/share/nginx/html \
  -v $(pwd)/conf.d:/etc/nginx/conf.d \
  --name nginx-server \
  my-nginx

2. 配置 HTTPS

在 conf.d 目录下创建 ssl.conf:

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

修改 Dockerfile 添加 SSL 支持:

FROM nginx:alpine

# 创建存放证书的目录
RUN mkdir -p /etc/nginx/ssl

# 复制 SSL 证书
COPY ssl/nginx.crt /etc/nginx/ssl/
COPY ssl/nginx.key /etc/nginx/ssl/

COPY conf.d /etc/nginx/conf.d
COPY html /usr/share/nginx/html

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

3. 配置反向代理

在 conf.d 目录下创建 proxy.conf:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend-service;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

upstream backend-service {
    server backend1:8080;
    server backend2:8080;
}

常见问题处理

1. 容器无法启动

  • 检查端口是否被占用
  • 确认配置文件语法正确
  • 查看容器日志:docker logs nginx-server

2. 访问网站 404

  • 确认网站文件已正确复制到容器中
  • 检查 Nginx 配置中的 root 路径
  • 确认文件权限正确

3. 性能优化

可以通过修改 Nginx 配置来优化性能:

# 在 nginx.conf 中添加
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    keepalive_timeout 65;
    client_max_body_size 10M;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
}

最佳实践

  1. 安全性考虑

    • 使用非 root 用户运行 Nginx
    • 定期更新基础镜像
    • 配置适当的访问控制
  2. 日志管理

    • 配置日志轮转
    • 使用数据卷持久化日志
    • 考虑使用日志聚合系统
  3. 监控

    • 配置健康检查
    • 使用 Docker 的监控工具
    • 设置告警机制

参考资源

  • Nginx 官方文档
  • Docker Hub Nginx
  • Nginx 配置最佳实践
最近更新:: 2025/3/25 13:32
Contributors: YAOBIN