🔥 前言
在容器化技术日益普及的今天,你会不会觉得制作出来的镜像动辄几百MB太臃肿?或者在修改 Nginx 默认首页时,中文总是显示成“楹︽槉褰”这种外星文字?
今天,我就带大家实战一次:基于 RockyLinux 官方镜像,利用 多阶段构建(Multi-stage build) 技术,从零编译安装 Nginx,并彻底搞定中文显示和镜像瘦身!
🚀 核心需求图鉴
基础镜像:RockyLinux 9
构建技巧:多阶段构建(编译环境与运行环境分离)
功能定制:自定义维护者信息,修改 index.html 为个人姓名学号。
终极攻克:彻底解决 Docker 中 Nginx 中文乱码问题。
🛠️ 极简版 Dockerfile 源码
这份 Dockerfile 经过反复调试,直接复制可用:
# ==========================================
# 第一阶段:编译阶段 (Builder)
# ==========================================
FROM rockylinux:9 AS builder
LABEL maintainer=""
# 2. 安装编译环境 (gcc, make, wget等)
RUN yum install -y wget gcc make pcre-devel zlib-devel tar
# 3. 下载并解压 Nginx 源码
WORKDIR /src
RUN wget https://nginx.org/download/nginx-1.25.3.tar.gz && \
tar -zxvf nginx-1.25.3.tar.gz
# 4. 编译安装 (剔除不必要的模块)
WORKDIR /src/nginx-1.25.3
RUN ./configure --prefix=/usr/local/nginx --without-http_rewrite_module --without-http_gzip_module && \
make && \
make install
# 5. 【关键点】修改首页并解决中文乱码
RUN sed -i 's/Welcome to nginx!/你好/g' /usr/local/nginx/html/index.html
# 在 nginx.conf 中强制开启 UTF-8 编码,防止浏览器乱码
RUN sed -i '/http {/a \ charset utf-8;' /usr/local/nginx/conf/nginx.conf
# ==========================================
# 第二阶段:运行阶段 (Runtime)
# ==========================================
FROM rockylinux:9
# 再次声明作者
LABEL maintainer="你好"
# 【精髓】仅从 builder 阶段拷贝编译好的二进制文件
COPY --from=builder /usr/local/nginx /usr/local/nginx
# 配置环境变量
ENV PATH="/usr/local/nginx/sbin:${PATH}"
EXPOSE 80
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
💡 深度解析:为什么这么写?
- 为什么要用“多阶段构建”?
传统的 Dockerfile 构建完后,镜像里会带着 gcc、make 和几十 MB 的源码包。 使用 AS builder 之后,我们在第二阶段只拿走了 /usr/local/nginx 文件夹。最终镜像体积能从 600MB+ 缩减到 200MB 左右! - 解决乱码的“两把斧”
内容替换:sed -i ‘s/Welcome to nginx!/你好/g’ 确保 HTML 源码被修改。
编码声明:charset utf-8; 这一行非常关键!它告诉浏览器:“喂,用 UTF-8 解析我!”,从而完美避开“楹︽槉褰”乱码。
📋 常用操作命令手册
构建镜像: docker build -t my-nginx:v1 .
启动容器: docker run -d -p 8080:80 –name my-nginx-v1 my-nginx:v1
查看容器 IP: docker inspect -f ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ my-nginx-v1
导出镜像 Tar 包: docker save -o nginx_assignment.tar my-nginx:v1
✨ 运行效果展示
打开浏览器访问 http://localhost:8080,你会看到:
你好
If you see this page, the nginx web server is successfully installed…
✍️ 总结
通过本次实战,我们不仅掌握了 Dockerfile 的多阶段构建,还深入理解了 Nginx 配置与字符编码的关系。在生产环境下,保持镜像轻量和规范的编码习惯是每个架构师的必修课!









