目录
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.3
RUN patch -p1 < ../nginx_upstream_check_module-master/check_1.20.1+.patch
RUN ./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 8000
WORKDIR /usr/local/nginx/sbin
# 设置 Nginx 为容器启动时执行的命令
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]