docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker运行Nginx

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

作者:不惑_

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

前言

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

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

完成后,你将能够以快速、干净、可重复的方式运行属于你自己的 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

命令说明:

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

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

您可能感兴趣的文章:
阅读全文