前言

Nginx 是一款高性能 Web 服务器,常被用作反向代理、负载均衡器以及内容缓存。它以高效与灵活著称,是提供静态文件服务、流量管理和提升应用速度的首选解决方案。而当你将 Nginx 运行在 Docker 容器中时,还能进一步获得可移植性、快速部署和更整洁的管理体验

本教程将带你从零开始学习如何使用 Docker 部署 Nginx。内容包括:

  • 拉取官方镜像
  • 在 Docker 容器中运行 Nginx
  • 映射端口并访问服务
  • 使用自定义配置文件和 HTML 内容
  • 管理容器
  • 使用 Docker Compose 管理多容器环境

完成后,你将能够以快速、干净、可重复的方式运行属于你自己的 Nginx 服务。


一、运行 Nginx 所需的前提条件

在开始之前,请确保具备以下条件:

  1. 拥有 VPS 主机访问权限
    如果你还没有,可以考虑 云厂商 等提供的 VPS 托管方案。

  2. 服务器上已安装 Docker

  3. 熟悉基本的 Docker 命令

  4. 已安装 Docker Compose(用于高级配置)

⚠️ 重要提示
Docker 命令通常需要 sudo 权限。
你可以将当前用户添加到 Docker 用户组以免每次都输入 sudo
本教程中为简洁起见省略了 sudo,你可根据实际环境调整。


二、拉取 Nginx 官方 Docker 镜像

要启动 Nginx,首先需要从 Docker Hub 拉取官方镜像:

docker pull nginx

该命令会获取最新的稳定版 Nginx 镜像。推荐始终使用官方镜像,因为它由 Nginx 团队维护,更新及时且无冗余内容。

下载完成后,运行以下命令验证镜像是否存在:

docker images

在输出结果的“REPOSITORY”列中查找 nginx 即可确认。

Terminal window with "docker images" command executed and nginx shown in results


三、以分离模式运行 Nginx 容器

有了镜像后,可以启动一个名为 nginx-server 的容器:

docker run -d --name nginx-server -p 80:80 nginx

命令说明:

  • -d:让容器在后台运行(Detached 模式)
  • --name:为容器命名
  • -p 80:80:将主机的 80 端口映射到容器的 80 端口

Detached 模式意味着容器在后台持续运行,不占用当前终端,非常适合 Nginx 这类长期运行的服务。

验证容器运行状态:

docker ps

Terminal window with docker run command executed and docker ps command returning a running nginx container

然后在本地测试访问:

curl http://localhost:80

成功后,你将看到 Nginx 默认欢迎页:

Terminal window displaying curl http://localhost:80- command executed and Nginx default content returned


四、端口映射与访问控制

默认情况下,Nginx 在容器内部监听 80 端口
使用 -p 参数可以指定主机与容器端口的映射:

docker run -d --name nginx-alt -p 8080:80 nginx

这样,外部访问 http://localhost:8080 即可访问容器内部的 80 端口。

如果出现“port already allocated”错误,说明端口被占用,可以使用 lsof -i :80netstat 检查端口使用情况。

Terminal window with running containers displayed, PORTS section highlighted


五、自定义 Nginx 配置文件

你可以通过挂载自定义配置文件来实现反向代理、缓存、SSL 或其他高级功能。

创建配置文件:

nano nginx.conf

示例配置(将请求代理到 http://127.0.0.1:3000):

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}

运行带自定义配置的容器:

docker run -d --name nginx-reverse-proxy \
  -p 8080:80 \
  -v /full/path/to/nginx.conf:/etc/nginx/nginx.conf:ro \
  nginx

-v 参数挂载本地配置文件到容器内,并设置只读模式(:ro)。

测试代理是否生效:

curl http://localhost:8080

若需修改配置,修改文件后执行:

docker restart nginx-reverse-proxy

六、挂载静态网站内容

Nginx 最常见的用途之一是托管静态网页
只需将本地网站目录挂载到容器内:

docker run -d --name nginx-static \
  -p 8080:80 \
  -v /path/to/site:/usr/share/nginx/html:ro \
  nginx

这样,Nginx 会自动从 /usr/share/nginx/html 提供内容。默认配置支持 HTML、CSS、JS、图片等基础类型。

若需重定向、自定义缓存规则或访问控制,可再定义自有 nginx.conf


七、管理 Nginx 容器

常用命令如下:

停止容器

docker stop nginx-server

启动容器

docker start nginx-server

重启容器

docker restart nginx-server

查看日志

docker logs nginx-server

删除容器

docker stop nginx-server
docker rm nginx-server

保持环境整洁有助于避免端口冲突和资源浪费。
Terminal window with docker logs command executed and logs displayed

八、使用 Docker Compose 管理 Nginx

当项目包含多个容器时,Docker Compose 可以让部署更简单。
创建 docker-compose.yml 文件:

version: '3'
services:
  nginx:
    image: nginx
    container_name: nginx-compose
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/nginx.conf:ro

在同一目录下执行:

docker-compose up -d

停止并清理:

docker-compose down

九、多服务协同部署(Nginx + 后端)

Docker Compose 也可以同时运行前后端服务,例如 Node.js + Nginx。

示例 docker-compose.yml

version: '3'
services:
  backend:
    build: ./backend
    container_name: node-app
    ports:
      - "3000:3000"
    networks:
      - app-network

  nginx:
    image: nginx
    container_name: nginx-proxy
    ports:
      - "8080:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - backend
    networks:
      - app-network

networks:
  app-network:

这样,Nginx 将通过网络连接到后端容器,实现流量转发。


结语

至此,你已经学会如何:

  • 从官方镜像运行 Nginx
  • 使用自定义配置或静态资源
  • 管理容器生命周期
  • 通过 Docker Compose 构建多服务架构

Nginx + Docker 的组合能让部署更高效、环境更干净、迁移更方便。无论是搭建个人网站还是构建复杂微服务体系,这都是最稳妥的起点。

更多推荐