使用 Dockerfile 构建自定义 Nginx 镜像并集成 nginx_upstream_check_module

目录

1. 为什么需要自定义 Nginx 镜像?

2. Dockerfile 解析

2.1 基础镜像选择

2.2 安装依赖

2.3 下载并解压 Nginx 源码

2.4 应用补丁并编译 Nginx

2.5 暴露端口并设置启动命令

3. 构建并运行自定义 Nginx 镜像

3.1 构建镜像

3.2 运行容器

3.3 健康检测配置

4. 验证

5. 总结


1. 为什么需要自定义 Nginx 镜像?

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,广泛应用于生产环境中。然而,默认的 Nginx 镜像可能不包含我们所需的特定模块或配置。通过自定义 Nginx 镜像,我们可以:

  • 集成第三方模块(如 nginx_upstream_check_module)。

  • 优化配置以满足特定需求。

  • 减少镜像大小,提高部署效率。

2. Dockerfile 解析

下面是我们将要使用的 Dockerfile,它基于 Alpine Linux 构建,并集成了 nginx_upstream_check_module 模块。

# 使用构建基础镜像,例如 Alpine Linux,并标记为构建阶段
FROM alpine:3.21.2# 安装必要的依赖包,并清理缓存以减少镜像大小
RUN apk add --no-cache \build-base \pcre2-dev \openssl-dev \zlib-dev \linux-headers \&& rm -rf /var/cache/apk/*# 创建工作目录
WORKDIR /usr/local/src# 下载 Nginx 源码和 nginx_upstream_check_module 源码,并解压
RUN wget http://nginx.org/download/nginx-1.25.3.tar.gz && \tar -zxvf nginx-1.25.3.tar.gz && \wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master && \unzip master# 切换到 Nginx 源码目录,配置、编译并安装 Nginx
WORKDIR nginx-1.25.3RUN patch -p1 < ../nginx_upstream_check_module-master/check_1.20.1+.patchRUN ./configure --prefix=/usr/local/nginx \--with-http_stub_status_module \--with-http_ssl_module \--add-module=../nginx_upstream_check_module-master \&& make \&& make install \&& rm -rf /usr/local/src/*  # 清理源码和临时文件,减少最终镜像大小# 暴露 Nginx 常用的端口
EXPOSE 80 443 8080 8000WORKDIR /usr/local/nginx/sbin
# 设置 Nginx 为容器启动时执行的命令
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

2.1 基础镜像选择

我们选择了 alpine:3.21.2 作为基础镜像。Alpine Linux 是一个轻量级的 Linux 发行版,镜像体积小,适合构建最小化的 Docker 镜像。

2.2 安装依赖

在构建 Nginx 之前,我们需要安装一些必要的依赖包,如 build-basepcre2-devopenssl-dev 等。这些依赖包是编译 Nginx 所必需的。 

RUN apk add --no-cache \build-base \pcre2-dev \pcre2 \openssl-dev \zlib-dev \linux-headers \&& rm -rf /var/cache/apk/*

2.3 下载并解压 Nginx 源码

接下来,我们下载 Nginx 的源码和 nginx_upstream_check_module 模块的源码,并解压它们。

RUN wget http://nginx.org/download/nginx-1.25.3.tar.gz && \tar -zxvf nginx-1.25.3.tar.gz && \wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master && \unzip master

2.4 应用补丁并编译 Nginx

nginx_upstream_check_module 模块需要打补丁才能与 Nginx 1.20.1+ 版本兼容。我们使用 patch 命令应用补丁,然后配置、编译并安装 Nginx。 

RUN patch -p1 < ../nginx_upstream_check_module-master/check_1.20.1+.patchRUN ./configure --prefix=/usr/local/nginx \--with-http_stub_status_module \--with-http_ssl_module \--add-module=../nginx_upstream_check_module-master \&& make \&& make install \&& rm -rf /usr/local/src/*  # 清理源码和临时文件,减少最终镜像大小

2.5 暴露端口并设置启动命令

最后,我们暴露 Nginx 常用的端口(80、443、8080、8000),并设置 Nginx 为容器启动时执行的命令。

EXPOSE 80 443 8080 8000WORKDIR /usr/local/nginx/sbin
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

3. 构建并运行自定义 Nginx 镜像

3.1 构建镜像

在 Dockerfile 所在的目录下,运行以下命令构建镜像:

docker build -t nginx-upstream-check:1.25.3 .

3.2 运行容器

构建完成后,可以使用以下命令运行容器:

docker run -d -p 8000:8000 -v /home/nginx/conf:/usr/local/nginx/conf -v /home/nginx/logs:/usr/local/nginx/logs   nginx-upstream-check:1.25.3

3.3 健康检测配置

upstream upstream1 {server www.baidu.com;server 192.168.1.3:8080;server 192.168.1.4:8080;# 每隔2秒检查后端真实节点状态,成功2次为up状态,失败3次为down状态,超时时间为1秒check interval=2000 rise=2 fall=3 timeout=1000 type=http;# 设置描述了检查模块在每次检查时,向后端节点发送什么样的信息check_http_send "HEAD / HTTP/1.0\r\n\r\n";# 健康的状态码 check_http_expect_alive http_2xx http_3xx;
}

4. 验证

出现以下相关日志表示已经成功

5. 总结

通过本文,我们学习了如何使用 Dockerfile 构建一个自定义的 Nginx 镜像,并集成了 nginx_upstream_check_module 模块。这种自定义镜像不仅可以根据需求灵活配置,还能减少镜像体积,提高部署效率。希望本文对你有所帮助,欢迎在评论区分享你的想法和经验!


参考链接:

  • Nginx 官方文档

  • nginx_upstream_check_module GitHub 仓库

  • Alpine Linux 官方镜像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16790.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python办公自动化之PDF

python版本&#xff1a;3.13.1 开发工具&#xff1a;pycharm 安装三方库&#xff1a;pypdf2 、pdfplumber、pymupdf 一、从PDF中提取文字 用Python从PDF中提取文字-CSDN博客 二、从PDF中提取表格 用Python从PDF中提取表格-CSDN博客 三、拆分和合并PDF文件 用Python拆…

ds-download-link 插件:以独特图标选择,打造文章下载链接

源码介绍 “ds-download-link”插件为 WordPress 网站提供了在文章编辑器中添加下载链接的功能&#xff0c;每个下载链接都支持图标选择&#xff0c;并能将这些链接以美观的样式展示在文章前端页面。以下是该插件的主要特性和功能&#xff1a; 后台功能 在文章编辑器下方添加…

实操部署DeepSeek,添加私有知识库

目录 一、环境介绍 PowerShell版本&#xff1a; wsl版本&#xff1a; 虚拟机版本&#xff1a; 本机IP&#xff1a; 虚拟机IP&#xff1a; 容器宿主机IP&#xff08;host.docker.internal&#xff09;&#xff1a; Docker版本&#xff1a; Docker Compose版本&#xff…

一致性Hash算法延伸至Redis分片扩容使Lua脚本失效如何解决

文章部分内容来源&#xff1a;小林coding 问题场景&#xff1a;我们需要用Lua脚本&#xff0c;并且这个Lua脚本需要用到两个Key&#xff0c;但这两个Key必须命中同一台机器才可以&#xff0c;不然Lua脚本就会执行失败。如果集群扩容可能会导致两个Key落到不同的节点上导致Lua脚…

macMini16G内存M4芯片 DeepSeek-r1本地化部署+chatbox三步走

DeepSeek本地化部署&#xff0c;有利于保护隐私&#xff0c;调用也方便。 大体来说分为3步&#xff1a;安装ollama&#xff0c;获取deepseekR1模型&#xff0c;chatbox设置并调用。 1.下载ollama客户端&#xff0c;并安装。 https://ollama.com/download 2.获取deepseekR1模型…

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…

港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。

今天给大家介绍一种名为BAG&#xff08;Body-Aligned 3D Wearable Asset Generation&#xff09;的新方法&#xff0c;可以自动生成可穿戴的3D资产&#xff0c;如服装和配饰&#xff0c;以适应特定的人体模型。BAG方法通过构建一个多视图图像扩散模型&#xff0c;生成与人体对齐…

用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk

核心代码 foreach ($flows[product_list] as $k>$gift) {$items_list[] [[name > 商品名称, value > $gift[product_name] ?? ],[name > 规格, value > $gift[product_name] ?? ],[name > 数量, value > $gift[quantity] ?? ],[name > 单位, v…

结构形模式---桥接模式

概念 桥接模式是一种结构化模式&#xff0c;是将一个大类或者一系列的紧密相关的类拆分为抽象和现实两个独立部分的层次结构&#xff0c;通过引用独立层次对象的组合实现类。 桥接模式可以将庞杂类拆分为几个类层次结构。 此后&#xff0c; 你可以修改任意一个类层次结构而不…

【Oracle篇】浅谈执行计划中的多表连接(含内连接、外连接、半连接、反连接、笛卡尔连接五种连接方式和嵌套、哈希、排序合并三种连接算法)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用

Deepseek这段时间非常火&#xff0c;最新推理模型Deepseek R1&#xff0c;都想装上试一试&#xff0c;特别是部署到服务器教程网上一堆教程好像没几个部署成功靠谱的&#xff0c;先说服务器上下载Ollama就难倒一堆人&#xff0c;每次都超时。今天终于在宝塔看到一篇 应用安装文…

win10 llamafactory模型微调相关②

微调 使用微调神器LLaMA-Factory轻松改变大语言模型的自我认知_llamafactory 自我认知-CSDN博客 【大模型微调】使用Llama Factory实现中文llama3微调_哔哩哔哩_bilibili 样本数据集 &#xff08;数据集管理脚本处需更改&#xff0c;见报错解决参考1&#xff09; 自我认知微…

华硕笔记本怎么一键恢复出厂系统_华硕笔记本一键恢复出厂系统教程

华硕笔记本怎么一键恢复出厂系统&#xff1f; 华硕一键恢复出厂系统是一个安全、高效、方便的恢复方式&#xff0c;让您轻松还原出厂设置&#xff0c;以获得更好的系统性能。如果您的华硕电脑遇到问题&#xff0c;可以使用华硕一键恢复出厂系统功能。下面小编就教大家华硕笔记本…

TongETLV3.0安装指引(by lqw)

文章目录 安装准备系统环境要求和端口jdk版本要求安装包磁盘要求安装脚本对系统配置的影响 系统配置vm.max_map_count 至少为 262144&#xff0c;且设置 vm.overcommit_memory 参数值为 1使用 TongETL 的 Linux 用户需要设置最大文件打开数为 65536用户需要有sodo权限。安装net…

AI前端开发:赋能开发者,提升解决实际问题的能力

近年来&#xff0c;人工智能技术飞速发展&#xff0c;深刻地改变着各行各业。在软件开发领域&#xff0c;AI写代码工具的出现更是引发了一场革命&#xff0c;尤其是前端开发领域&#xff0c;AI的应用正在显著提升开发者的解决实际问题的能力。本文将探讨AI前端开发如何提升效率…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC&#xff0c;翻阅手册的时候&#xff0c;发现了一个有意思的功能 混杂模式 H743的MAC控制器&#xff0c;可以设置为混杂模式&#xff0c;这就意味着它可以做一些网络监控的应用&#xff0c;譬如连接具备端口镜像功能的交换机&#xff0c;然后直接代替PC实现网络数据…

【Linux】Ubuntu Linux 系统 ——PHP开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;元宵节到了&#xff0c;在此祝大家元宵节快乐&#x1f606; 新的一年里&#xff0c;愿你步步高升&#xff0c;事事如意&#xff0c;心想事成&#xff01;! 本文是关于Linux 操作系统中部署PHP开发环境这部分基础内容&#xff0c;后…

SQL注入之布尔和时间盲注,sqli-labs

实验环境&#xff1a; sqli-labs&#xff0c;小皮面板搭建&#xff0c;edge浏览器 apache&#xff1a;2.4.39&#xff0c;MySQL&#xff1a;5.7 PHP&#xff1a;5.39 Python&#xff08;pycharm2023&#xff09;:3 less-8 布尔盲注&#xff1a; 1.我这里是采用最简单的直接采…

C/C++后端开发面经

字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程&#xff1a; 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…

如何用.NET Core Identity实现定制化的用户身份验证系统

目录 初识标识框架(Identity) 重置密码操作 JWT基本使用 Swagger添加报文头 初识标识框架(Identity) .net core Identity是一个完整的身份验证和授权框架&#xff0c;它帮助开发人员处理用户的登录、注册、角色管理、权限控制以及其他与用户身份相关的操作&#xff0c;标…