Docker 搭建 Nginx 服务器

news2025/2/25 12:34:34

系列文章目录

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":挂载网站文件目录,用于存放静态网页。

七、修改 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.coloradmin.cn/o/2304886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AI + 大模型开发应用

JAVA SpringAI 大模型开发AI应用DEMO 前言JAVA项目创建示例 前言 在当今快速发展的技术领域,人工智能(AI)已经成为推动创新和变革的重要力量。然而,AI应用的开发过程往往复杂且耗时,需要开发者具备深厚的技术背景和丰…

【C++11】 并发⽀持库

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 前言:🚀 并发⽀持库一:🔥 thread库 二:🔥 this_thread 三:🔥 mutex 四&#xff1…

Windows 11【1001问】如何下载Windows 11系统镜像

随着科技的不断进步,操作系统也在不断地更新换代。Windows 11作为微软最新一代的操作系统,带来了许多令人兴奋的新特性与改进,如全新的用户界面、更好的性能优化以及增强的安全功能等。对于想要体验最新技术或者提升工作效率的用户来说&#…

视觉分析之边缘检测算法

9.1 Roberts算子 Roberts算子又称为交叉微分算法,是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。 常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。 其缺点是对边缘的定位…

深度学习-6.用于计算机视觉的深度学习

Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…

【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解

目录 一、前言 二、蓝耘智算平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 应用场景 2.4 对DeepSeek 的支持 2.4.1 DeepSeek 简介 2.4.2 DeepSeek 优势 三、蓝耘智算平台部署DeepSeek-R1操作过程 3.1 注册账号 3.1.1 余额检查 3.2 部署DeepSeek-R1 3.2.1 获取…

《计算机视觉》——图像拼接

图像拼接 图像拼接是将多幅有重叠区域的图像合并成一幅全景或更大视角图像的技术,以下为你详细介绍: 原理:图像拼接的核心原理是基于图像之间的特征匹配。首先,从每幅图像中提取独特的特征点,如角点、边缘点等&#x…

element实现需同时满足多行合并和展开的表格

element实现需同时满足多行合并和展开的表格 需求描述: 以下面这张图为例,此表格的“一级表格”这一行可能存在多行数据,这种情况下需要将“一级指标”,“一级指标扣分xxx”,“一级指标关联xxx”这三列数据的行展示根据后面数据&#xff08…

气象干旱触发水文(农业)干旱的概率及其触发阈值的动态变化-贝叶斯copula模型

前言 在干旱研究中,一个关键的科学问题是:在某一地区发生不同等级的气象干旱时,气象干旱会以何种概率引发不同等级的水文干旱、农业干旱和地下水干旱?换句话说,气象干旱的不同程度会分别引发其他类型干旱的哪种等级&a…

系统学习算法:专题十二 记忆化搜索

什么是记忆化搜索,我们先用一道经典例题来引入,斐波那契数 题目一: 相信一开始学编程语言的时候,就一定碰到过这道题,在学循环的时候,我们就用for循环来解决,然后学到了递归,我们又…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

51单片机测试题AI作答测试(DeepSeek Kimi)

单片机测试题 DeepSeek Kimi 单项选择题 (10道) 6题8题判断有误 6题判断有误 智谱清言6题靠谱,但仔细斟酌,题目出的貌似有问题,详见 下方。 填空题 (9道) 脉宽调制(Pulse …

去耦电容的作用详解

在霍尔元件的实际应用过程中,经常会用到去耦电容。去耦电容是电路中装设在元件的电源端的电容,其作用详解如下: 一、基本概念 去耦电容,也称退耦电容,是把输出信号的干扰作为滤除对象。它通常安装在集成电路&#xf…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二) 第一部分:网络平台搭建与设备安全防护任务书第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响应&…

深入剖析:基于红黑树实现自定义 map 和 set 容器

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 在 C 标准模板库(STL)的大家庭里,map和set可是超级重要的关联容器成员呢😎&#x…

20-R 绘图 - 饼图

R 绘图 - 饼图 R 语言提供来大量的库来实现绘图功能。 饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系。 R 语言使用 pie() 函数来实现饼图,语法格式如下: pie(x, l…

第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离

Q1、判断操作后字符串中的数字是否相等 1、题目描述 给你一个由数字组成的字符串 s 。重复执行以下操作,直到字符串恰好包含 两个 数字: 从第一个数字开始,对于 s 中的每一对连续数字,计算这两个数字的和 模 10。用计算得到的新…

软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用

17.1 网络安全应急响应概述 网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。 17.1.1 网络安全应急响应概念 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 17.2.3 网络安…

点击修改按钮图片显示有问题

问题可能出在表单数据的初始化上。在 ave-form.vue 中,我们需要处理一下从后端返回的图片数据,因为它们可能是 JSON 字符串格式。 vue:src/views/tools/fake-strategy/components/ave-form.vue// ... existing code ...Watch(value)watchValue(v: any) …

Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法

Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8 引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。…