从零了解 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

相关推荐
用户03284722207033 分钟前
如何搭建本地yum源(上)
运维
武子康2 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造