全网最全!Docker多阶段构建Nginx实战:手把手教你解决中文乱码与镜像瘦身

🔥 前言
在容器化技术日益普及的今天,你会不会觉得制作出来的镜像动辄几百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;"]

💡 深度解析:为什么这么写?

  1. 为什么要用“多阶段构建”?
    传统的 Dockerfile 构建完后,镜像里会带着 gcc、make 和几十 MB 的源码包。 使用 AS builder 之后,我们在第二阶段只拿走了 /usr/local/nginx 文件夹。最终镜像体积能从 600MB+ 缩减到 200MB 左右!
  2. 解决乱码的“两把斧”
    内容替换: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 配置与字符编码的关系。在生产环境下,保持镜像轻量和规范的编码习惯是每个架构师的必修课!

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇