在Docker容器中运行Nginx的详细教程

 更新时间:2025年10月22日 10:04:22   作者:不惑_  
Nginx 是一款高性能 Web 服务器,常被用作反向代理、负载均衡器以及内容缓存,当你将 Nginx 运行在 Docker 容器中时,还能进一步获得可移植性、快速部署和更整洁的管理体验,本教程将带你从零开始学习如何使用 Docker 部署 Nginx,需要的朋友可以参考下

前言

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 即可确认。

三、以分离模式运行 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

然后在本地测试访问:

curl http://localhost:80

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

四、端口映射与访问控制

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

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

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

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

五、自定义 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

保持环境整洁有助于避免端口冲突和资源浪费。

八、使用 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 的组合能让部署更高效、环境更干净、迁移更方便。无论是搭建个人网站还是构建复杂微服务体系,这都是最稳妥的起点。

以上就是在Docker容器中运行Nginx的详细教程的详细内容,更多关于Docker运行Nginx的资料请关注脚本之家其它相关文章!

相关文章

  • 如何在Docker中部署运行jar

    如何在Docker中部署运行jar

    这篇文章主要介绍了如何在Docker中部署运行jar问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • centOS7安装docker的详细步骤

    centOS7安装docker的详细步骤

    这篇文章主要为大家介绍了centOS7安装docker的详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用docker离线部署dify之docker镜像问题及部署过程

    使用docker离线部署dify之docker镜像问题及部署过程

    这篇文章主要给大家介绍了关于使用docker离线部署dify之docker镜像问题及部署过程,通过配置多个镜像源解决了,此外还介绍了如何将Dify镜像转移到离线环境并启动服务,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • docker部署Macvlan实现跨主机网络通信的实现

    docker部署Macvlan实现跨主机网络通信的实现

    这篇文章主要介绍了docker部署Macvlan实现跨主机网络通信的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Docker 网络之端口绑定的方法

    Docker 网络之端口绑定的方法

    本篇文章主要介绍了Docker 网络之端口绑定的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 用docker一键部署前后端分离项目的详细流程

    用docker一键部署前后端分离项目的详细流程

    这篇文章主要介绍了如何用docker一键部署前后端分离项目的详细流程,通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Docker中镜像构建与缓存优化实战指南

    Docker中镜像构建与缓存优化实战指南

    在实际项目中,我们需要一套完善的镜像构建与缓存优化方案,以提升构建速度,降低带宽与存储成本,保证构建稳定性,下面我们就来看看具体实现方法吧
    2025-07-07
  • 解决docker修改mysql配置文件的问题

    解决docker修改mysql配置文件的问题

    今天在用docker启动一个5.7的数据库在建表时候遇到一个问题,但是很快就解决了,下面小编给大家讲解下docker怎么修改mysql内部的配置,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • docker如何在一个容器内部署多个服务

    docker如何在一个容器内部署多个服务

    这篇文章主要介绍了docker如何在一个容器内部署多个服务,思路是这样的首先拿到你的httpd,以及你的springBoot,合并他们的Dockerfile,然后打包,然后启动的时候启动多个端口(httpd的端口和你服务的端口),需要的朋友可以参考下
    2024-01-01
  • Docker搭建es和kibana的详细过程

    Docker搭建es和kibana的详细过程

    这篇文章主要介绍了Docker搭建es和kibana的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11

最新评论