Docker 搭建 Nginx 服务器

news/2025/2/26 20:56:46

系列文章目录

Docker 搭建 Nginx 服务器

  • 系列文章目录
  • 前言
  • 一、准备工作
  • 二、设置 Nginx 容器的目录结构
  • 三、启动一个临时的 Nginx 容器来复制配置文件
  • 四、复制 Nginx 配置文件到本地目录
  • 五、删除临时 Nginx 容器
  • 六、创建并运行 Nginx 容器,挂载本地目录
  • 七、修改 `nginx.conf` 文件配置监听端口
  • 八、端口配置:Host 网络模式 vs Port 映射模式
  • 九、查看日志和检查容器状态
  • 十、访问 Nginx 服务
  • 总结


前言

在现代 Web 开发中,Nginx 是一个广泛使用的高性能 Web 服务器,它不仅可以用于反向代理,还能作为负载均衡器、HTTP 缓存等。通过 Docker 部署 Nginx,不仅能够简化安装过程,还能轻松进行配置和管理。

本篇文章将指导你通过 Docker 快速搭建一个 Nginx 环境,并讲解如何修改配置文件以定制化你的服务器设置。


一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、设置 Nginx 容器的目录结构

为了便于管理,我们首先创建一个目录结构,用于存放 Nginx 配置文件、日志文件和 HTML 文件。

# 安装路径
DIR="/opt/docker/demo"
DOCKER_NAME="docker-nginx"

# 创建目录结构
mkdir -p "$DIR/nginx/conf"
mkdir -p "$DIR/nginx/log"
mkdir -p "$DIR/nginx/html"
  • conf:存放 Nginx 的主配置文件和自定义配置文件。
  • log:存放 Nginx 的日志文件。
  • html:存放静态网站文件。

三、启动一个临时的 Nginx 容器来复制配置文件

我们需要一个基础的 Nginx 配置文件,Docker 官方镜像已经内置了标准配置文件。为了方便地获取并修改这些配置文件,我们首先启动一个临时的 Nginx 容器

# 启动一个临时的 nginx 容器来复制配置文件
docker run --name nginx_test -p 9011:80 -d nginx:stable-alpine

这个命令会启动一个 nginx:stable-alpine 容器,并将其 80 端口映射到宿主机的 9011 端口。我们可以通过访问 http://localhost:9011 来查看默认的 Nginx 欢迎页面。

四、复制 Nginx 配置文件到本地目录

接下来,我们将容器内的 Nginx 配置文件复制到本地,以便进行自定义修改。使用以下命令将 nginx.conf 文件和 conf.d 配置目录复制到宿主机的 $DIR/nginx/conf 目录中:

# 复制 nginx 配置文件到本地目录
docker cp nginx_test:/etc/nginx/nginx.conf "$DIR/nginx/conf/nginx.conf"
docker cp nginx_test:/etc/nginx/conf.d "$DIR/nginx/conf/conf.d"

这样,我们就获取到了 Nginx 的配置文件,并且可以根据需要进行修改。

五、删除临时 Nginx 容器

复制完配置文件后,我们不再需要这个临时的 Nginx 容器,因此可以将其删除:

# 删除临时 nginx 容器
docker rm -f nginx_test

六、创建并运行 Nginx 容器,挂载本地目录

现在,我们可以使用自己的配置文件来启动一个持久化的 Nginx 容器。通过将本地目录挂载到容器中,我们可以确保配置文件、日志和网站文件持久化存储在宿主机上。

以下是启动 Nginx 容器的命令:

docker run -d \
  --restart=always \
  --name "$DOCKER_NAME" \
  --network host \
  -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \
  -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \
  -v "$DIR/nginx/log:/var/log/nginx" \
  -v "$DIR/nginx/html:/opt/html" \
  nginx:stable-alpine

解释各个参数:

  • -d:后台运行容器
  • --restart=always容器在崩溃或系统重启后自动重启。
  • --name "$DOCKER_NAME"容器的名称为 docker-nginx
  • --network host容器将使用宿主机的网络栈。
  • -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf":挂载自定义的 nginx.conf 配置文件到容器中。
  • -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d":挂载自定义的配置目录。
  • -v "$DIR/nginx/log:/var/log/nginx":挂载日志目录,便于查看和管理日志。
  • -v "$DIR/nginx/html:/opt/html":挂载网站文件目录,用于存放静态网页。

nginxconf__100">七、修改 nginx.conf 文件配置监听端口

如果你希望更改 Nginx 的默认端口,可以在修改的 nginx.conf 文件中进行配置。在 nginx.conf 中,你可以找到以下内容:

server {
    listen 80;
    server_name localhost;
    client_max_body_size 100m;

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log notice;
    
    #测试
    location /demo/testme {
        default_type text/html;
        return 200 "demo success 80!";
    }

     #首页静态资源
     location /demo {

            autoindex off; # 禁止目录索引
            server_tokens off; # 在http{}块中隐藏服务器版本号

            client_max_body_size 100m;
            alias /opt/html/dist;
            index index.html index.htm;

            try_files $uri $uri/ /demo/index.html;  #front为路由 而不是目录
    }
}

listen 80; 改为你需要的端口(例如 listen 8080;)。这样,Nginx 就会监听新的端口。

八、端口配置:Host 网络模式 vs Port 映射模式

在 Docker 中,容器的端口配置是非常关键的。Nginx 容器支持两种主要的端口配置方式:Host 网络模式Port 映射模式

  1. Host 网络模式

    在 Docker 中使用 --network host 时,容器将共享宿主机的网络栈,这意味着容器直接使用宿主机的 IP 地址和端口来暴露服务。通过这种方式,容器会使用宿主机的端口 80 来提供服务。

    配置命令:

    docker run -d \
      --restart=always \
      --name "$DOCKER_NAME" \
      --network host \
      -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \
      -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \
      -v "$DIR/nginx/log:/var/log/nginx" \
      -v "$DIR/nginx/html:/opt/html" \
      nginx:stable-alpine
    
    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。
  2. Port 映射模式

    如果你希望使用宿主机的特定端口来访问容器内的服务,可以使用 -p 参数进行端口映射。通过这种方式,容器内部的端口(例如 80)将映射到宿主机的另一个端口(例如 8080)。

    配置命令:

    docker run -d \
     --restart=always \
     --name "$DOCKER_NAME" \
     -p 8080:80 \
     -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \
     -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \
     -v "$DIR/nginx/log:/var/log/nginx" \
     -v "$DIR/nginx/html:/opt/html" \
     nginx:stable-alpine
    

    在这个配置中:
    -p 8080:80:将宿主机的 8080 端口映射到容器的 80 端口。你可以通过宿主机的 http://localhost:8080 访问 Nginx 服务。

    • 优点
      • 容器端口与宿主机端口不同,可以避免端口冲突。
      • 容器与宿主机之间有更好的网络隔离性。
      • 支持多个容器映射到宿主机不同的端口,适合多容器环境。
    • 缺点
      • 可能会导致稍微的性能损失,因为需要进行额外的端口映射。
      • 需要手动管理和指定端口映射。

九、查看日志和检查容器状态

容器启动后,你可以通过以下命令查看容器的状态,确保它在运行中:

docker ps

如果容器未正常运行,可以查看日志进行排查:

docker logs docker-nginx

查看 Nginx 的访问日志和错误日志也可以帮助你调试网站:

tail -f "$DIR/nginx/log/access.log"
tail -f "$DIR/nginx/log/error.log"

十、访问 Nginx 服务

完成上述步骤后,你可以通过浏览器访问宿主机的 IP 地址和配置的端口,查看 Nginx 是否正常运行。

  • 如果使用了 --network host,则可以通过 http://localhost 或宿主机的 IP 地址访问服务。
  • 如果使用了端口映射,例如 -p 8080:80,则可以通过 http://localhost:8080 访问 Nginx 欢迎页面。

在这里插入图片描述


总结

通过 Docker 部署 Nginx 容器非常简便,并且可以灵活配置各个参数。通过挂载本地目录,Nginx 的配置文件、日志和网站文件可以持久化存储在宿主机上,便于管理和备份。使用 Docker 来运行 Nginx 容器不仅简化了部署流程,还提供了极大的灵活性和可扩展性。


http://www.niftyadmin.cn/n/5869165.html

相关文章

PyTorch常用函数总结(持续更新)

本文主要记录自己在用 PyTorch复现经典模型 过程中遇到的一些函数及用法,以期对 常见PyTorch函数 更加熟练~ 官方Docs:PyTorch documentation — PyTorch 2.6 documentation 目录 数据层面 torch.sign(tensor) torch.tensor(np.eye(3)[y]) torch.on…

文心一言AI创意画

介绍 文心一言是百度推出的新一代知识增强大语言模型,属于文心大模型家族的新成员。‌它能够与人对话互动、回答问题、协助创作,高效便捷地帮助人们获取信息、知识和灵感。‌ 特点 文心一言基于数万亿数据和数千亿知识进行融合学习,采用预训…

【大语言模型】【整合版】DeepSeek 模型提示词学习笔记(散装的可以看我之前的学习笔记,这里只是归纳与总结了一下思路,内容和之前发的差不多)

以下是个人笔记的正文内容: 原文在FlowUs知识库上,如下截图。里面内容和这里一样,知识排版好看一点 一、什么是 DeepSeek 1. DeepSeek 简介 DeepSeek 是一家专注于通用人工智能(AGI)的中国科技公司,主攻大模型研发与…

Android Audio实战——音频相关基础概念(附)

Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…

IDEA配置Github上传项目

1. 创建项目仓库 2. 设置独立账户 可配置ssh key 可配置令牌,这里选择令牌,Personal access tokens 生成个人访问令牌: 登录到 GitHub,前往 Settings > Developer settings > Personal access tokens,生成一个…

FastAPI高级特性(二):错误处理、中间件与应用生命周期

前言 FastAPI 不仅以其高性能和易用性著称,还内置了丰富的高级特性,使得开发者可以快速组织和封装各种功能。在本篇博客中,我们将深入探讨 FastAPI 的一些高级特性,包括错误处理、中间件和应用生命周期管理。通过这些特性,开发者可以在应用的不同阶段和层面上挂载自定义逻…

机器视觉--线扫相机触发

绪论 在当今蓬勃发展的机器视觉领域,线扫相机堪称关键角色,它凭借高分辨率的扫描成像能力,广泛应用于工业检测、物流识别、印刷质量检测等众多核心场景。线扫相机的触发方式作为成像环节的核心要素,直接决定了图像采集的精准度与…

看视频学习方法总结

以下是提高教学视频吸收率的系统性方法,结合认知科学原理和实际学习场景,帮助您最大化学习效果: 一、观看前的黄金准备阶段 60秒快速扫描法 用1分钟快速浏览视频目录、章节标题和简介,建立知识框架。荷兰伊拉斯姆斯大学实验表明&…