Ubuntu22.04.5 LTS版本中 Nginx源码构建docker镜像

Ubuntu22.04.5 LTS版本中 Nginx源码构建docker镜像

一、获取源码安装包

(Nginx 在编译时依赖 PCRE 来实现其强大的正则表达式功能(如 location 匹配、rewrite 重写规则等),所以在nginx源码构建镜像时,有必要把pcre源码一同进行编译)

pcre源码:

采用国内下载地址(阿里云):https://mirrors.aliyun.com/exim/pcre/

目的:提供正则表达式支持,这是 Nginx 核心功能(如 location 匹配、rewrite 规则)的必备依赖

关于版本选择

  • PCRE:仅需维护旧系统或项目已依赖 PCRE 且无更新需求。
  • PCRE2
    • 需要兼容 Perl 5.10+ 的新特性(如递归匹配、命名捕获组)。
    • 处理多语言文本(如中文、日文等 Unicode 场景)。
    • 要求高性能匹配(如高并发 Nginx、日志分析工具)。
    • 需要现代 API 和扩展性支持。
nginx源码:

采用官方下载地址:https://nginx.org/en/download.html

目的:构建自定义 Nginx 服务器
版本选择稳定版即可

二、将源码上传到指定文件夹中

如图所示,将源码上传至同一个文件夹中:

注意:所有文件需位于同一目录(Docker 构建上下文)
在这里插入图片描述

三、创建并编译dockerfile文件

为了验证自行构建镜像成功,我编辑了一个index.html文件以证明后续镜像由源码编译构成。
在这里插入图片描述

创建dockerfile文件并进行配置:
vim Dockerfile

在这里插入图片描述

# 基础镜像选择
# 使用最新版 Ubuntu(生产环境建议指定具体版本如 ubuntu:22.04)
FROM ubuntu:latest

# 安装编译依赖并清理缓存
# 1. 更新包索引
# 2. 安装必要工具:
#    - wget:下载工具
#    - build-essential:GCC编译工具链
#    - libpcre3-dev:PCRE正则库开发文件
#    - zlib1g-dev:压缩库支持
#    - libssl-dev:HTTPS/TLS支持
# 3. 清理APT缓存减小镜像体积
RUN apt update && \
    apt install -y wget build-essential libpcre3-dev zlib1g-dev libssl-dev && \
    rm -rf /var/lib/apt/lists/*

# 复制本地源码到容器
# 需确保文件在Docker构建上下文中
COPY pcre-8.38.tar.gz /usr/local/src/
COPY nginx-1.28.0.tar.gz /usr/local/src/

# 解压源码包
RUN tar -xzf /usr/local/src/pcre-8.38.tar.gz -C /usr/local/src/ && \
    tar -xzf /usr/local/src/nginx-1.28.0.tar.gz -C /usr/local/src/

# 编译安装 PCRE
WORKDIR /usr/local/src/pcre-8.38
# 配置参数:
# --prefix:指定安装路径(避免系统冲突)
RUN ./configure --prefix=/usr/local/src/pcre-8.38 && \
    make && \
    make install

# 编译安装 Nginx
WORKDIR /usr/local/src/nginx-1.28.0
# 关键配置参数:
# --prefix:Nginx安装路径
# --user/group:非root运行用户(增强安全性)
# --with-http_ssl_module:启用HTTPS支持
# --with-http_stub_status_module:启用状态监控
# --with-pcre:链接自定义PCRE路径
RUN ./configure \
    --prefix=/usr/local/nginx \
    --user=www \
    --group=www \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-pcre=/usr/local/src/pcre-8.38 && \
    make && \
    make install

# 清理构建文件减小镜像体积
RUN rm -rf /usr/local/src/*

# 创建非特权用户
# -s /usr/sbin/nologin:禁止登录(安全加固)
# -M:不创建家目录
RUN useradd -s /usr/sbin/nologin -M www && \
    chown -R www:www /usr/local/nginx

# 配置Nginx以前台模式运行
# 容器要求主进程保持前台运行
RUN echo 'daemon off;' >> /usr/local/nginx/conf/nginx.conf

# 复制自定义首页
# 用于验证自定义构建
COPY index.html /usr/local/nginx/html/

# 暴露HTTP端口
EXPOSE 80

# 容器启动命令
# 使用JSON数组格式避免shell解析问题
CMD ["/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]

四、运行构建镜像命令

# 构建命令:
# -t:指定镜像名称和标签
# .:使用当前目录作为构建上下文
docker build -t longlijisi_nginx .

构建过程:
1.Docker 读取 Dockerfile 执行指令
2.按顺序创建镜像层(每层对应一个指令)
3.最终生成包含自定义 Nginx 的镜像
在这里插入图片描述

五、查看镜像是否构建成功并运行测试

#运行构建成功的镜像
# --rm	自动清理容器	
#  -d	后台运行	
#  -P	自动端口映射	
docker run -d -P longlijisicode_nginx

#查看运行中的容器
docker ps

对应自行配置的index.html文件内容,确定源码编译镜像成功

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值