从零了解 Dockerfile:构建属于你的 Docker 镜像

从零了解 Dockerfile:构建属于你的 Docker 镜像

  • [🚀 从零了解 Dockerfile:构建属于你的 Docker 镜像](#🚀 从零了解 Dockerfile:构建属于你的 Docker 镜像)
    • [🧱 一、什么是 Dockerfile?](#🧱 一、什么是 Dockerfile?)
    • [🧩 二、Dockerfile 常见指令简介](#🧩 二、Dockerfile 常见指令简介)
    • [🧪 三、实战案例:基于 Nginx 的自定义网页镜像](#🧪 三、实战案例:基于 Nginx 的自定义网页镜像)
      • [🧰 项目结构](#🧰 项目结构)
      • [📝 1. 编写网页内容](#📝 1. 编写网页内容)
      • [🐳 2. 编写 Dockerfile](#🐳 2. 编写 Dockerfile)
      • [🏗️ 3. 构建镜像](#🏗️ 3. 构建镜像)
      • [🚀 4. 运行容器并访问网页](#🚀 4. 运行容器并访问网页)
    • [⚙️ 四、案例讲解与原理说明](#⚙️ 四、案例讲解与原理说明)
    • [🧭 五、拓展:更新网页内容](#🧭 五、拓展:更新网页内容)
    • [🧩 六、总结](#🧩 六、总结)

✅在 Docker 中构建自定义镜像有两种主流方式:docker commit 命令和 Dockerfile 文件。

docker commit 命令可参考《Docker 镜像构建:手把手教你用 docker commit 定制专属镜像》,本文主要介绍 Dockerfile文件方式。


🚀 从零了解 Dockerfile:构建属于你的 Docker 镜像

通过 Dockerfile 构建镜像,是容器化开发的核心技能之一。本文将从基础概念到实际案例,带你全面理解如何编写 Dockerfile,并以 Nginx + 静态网页部署 为示例。


🧱 一、什么是 Dockerfile?

Dockerfile 是一份定义如何构建镜像的脚本文件。

它包含一系列指令(如 FROMCOPYRUN 等),Docker 会按照这些指令一步步"搭建"出镜像。

执行以下命令时:

bash 复制代码
docker build -t mynginx:v1 .

Docker 会读取当前目录的 Dockerfile,自动完成镜像构建。


🧩 二、Dockerfile 常见指令简介

指令 说明 示例
FROM 指定基础镜像 FROM nginx:latest
LABEL 添加作者信息 LABEL maintainer="charles@example.com"
COPY 拷贝文件到镜像中 COPY ./index.html /usr/share/nginx/html/
RUN 在构建镜像时执行命令 RUN apt-get update && apt-get install -y vim
EXPOSE 声明容器监听的端口 EXPOSE 80
CMD 指定容器启动后执行的命令 CMD ["nginx", "-g", "daemon off;"]

🧪 三、实战案例:基于 Nginx 的自定义网页镜像

我们来创建一个简单示例,在 Nginx 中部署一个自定义网页。

🧰 项目结构

bash 复制代码
mynginx/
├── Dockerfile
└── index.html

📝 1. 编写网页内容

index.html

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>欢迎访问我的自定义 Nginx 页面</title>
  <style>
    body { font-family: sans-serif; text-align: center; padding-top: 100px; background: #f3f6fa; }
    h1 { color: #0078d7; }
    p { color: #333; }
  </style>
</head>
<body>
  <h1>🚀 Hello Docker + Nginx!</h1>
  <p>这是一个通过 Dockerfile 构建的自定义 Nginx 镜像。</p>
</body>
</html>

🐳 2. 编写 Dockerfile

Dockerfile

dockerfile 复制代码
# 1️⃣ 基于官方 Nginx 镜像
FROM nginx:latest

# 2️⃣ 镜像维护者信息
LABEL maintainer="junjiu@example.com"

# 3️⃣ 将网页文件复制到 Nginx 默认网页目录
COPY ./index.html /usr/share/nginx/html/

# 4️⃣ 暴露容器端口
EXPOSE 80

# 5️⃣ 启动 Nginx(前台模式)
CMD ["nginx", "-g", "daemon off;"]

🏗️ 3. 构建镜像

mynginx 目录下执行:

bash 复制代码
docker build -t mynginx:v1 .

输出示例:

复制代码
Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM nginx:latest
 ---> 605c77e624dd
Step 2/5 : LABEL maintainer="junjiu@example.com"
 ---> Running in 9c4f6d...
Step 3/5 : COPY ./index.html /usr/share/nginx/html/
 ---> Using cache
 ---> 12456f90aabc
Step 4/5 : EXPOSE 80
 ---> Running in 3b2d8...
Step 5/5 : CMD ["nginx", "-g", "daemon off;"]
Successfully built 7e4b7c8d61f3
Successfully tagged mynginx:v1

🚀 4. 运行容器并访问网页

bash 复制代码
docker run -d -p 8080:80 mynginx:v1

然后打开浏览器访问:

👉 http://localhost:8080

即可看到刚刚部署的自定义网页:

"🚀 Hello Docker + Nginx! 这是一个通过 Dockerfile 构建的自定义 Nginx 镜像。"

如下截图示例:(我的环境是在虚拟机中运行,故填写虚拟机IP地址进行访问)


⚙️ 四、案例讲解与原理说明

步骤 说明
FROM nginx:latest 以官方 Nginx 镜像为基础,节省大量配置工作
COPY ./index.html /usr/share/nginx/html/ 将你自己的网页覆盖到默认 Nginx 目录中
EXPOSE 80 告诉 Docker 这个容器会监听 80 端口
CMD ["nginx", "-g", "daemon off;"] 让 Nginx 以前台模式运行(防止容器退出)

💡 默认情况下,Nginx 的网页文件路径是:
/usr/share/nginx/html/

所以只要把 index.html 放进去,容器启动后访问该目录即可看到内容。


🧭 五、拓展:更新网页内容

如果你修改了 index.html,重新构建镜像即可生效:

bash 复制代码
docker build -t mynginx:v2 .
docker run -d -p 8081:80 mynginx:v2

然后访问 http://localhost:8081,就能看到新版本网页。


🧩 六、总结

内容 说明
Dockerfile 定义镜像的构建过程
FROM nginx 继承官方镜像
COPY 文件 将本地网页放入容器
docker build 构建自定义镜像
docker run 启动并运行镜像

一份简单的 Dockerfile,可以让你的网页从"本地文件"瞬间变成"可运行的 Web 服务"。

这正是 Docker 的魅力所在------可移植、可复现、可扩展


📚 推荐阅读

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/154155972

相关推荐
亮子AI1 天前
application/json 服务器收到的是字符串,还是json对象?
运维·服务器·json
会飞的土拨鼠呀1 天前
docker部署 outline(栗子云笔记)
笔记·docker·容器
啃火龙果的兔子1 天前
如何将D:\BaiduNetdiskDownload所有目录下的所有图片复制提取到D:\bacPic
linux·运维·服务器
FF-Studio1 天前
RTX 5060 Ti Linux 驱动黑屏避坑指南:CUDA 13.1, Open Kernel 与 BIOS 设置
linux·运维·服务器·cuda
NetInside_1 天前
2025 DEM 趋势 × NetInside 产品能力:行业深度解读
运维·网络
usrcnusrcn1 天前
智能建筑的 “隐形神经”:交换机如何连接安防、照明与门禁系统?
运维·服务器·网络
叱咤少帅(少帅)1 天前
IDC机房机柜部署
运维
Jelly-小丑鱼1 天前
Linux搭建syslog日志服务器
linux·服务器·docker·日志服务器·syslog服务器
没有bug.的程序员1 天前
高频IO服务优化实战指南
java·jvm·spring·容器
阿巴阿巴boer1 天前
用wsl搭建远程linux服务器
linux·运维·服务器·ssh