详细介绍:Dockerfile 镜像构建实战

news/2025/10/30 14:36:41/文章来源:https://www.cnblogs.com/gccbuaa/p/19176976

前言

一、Dockerfile 是什么

二、Dockerfile 文件结构

基本语法格式:

三、常用 Dockerfile 指令详解

四、Dockerfile 构建流程

1️⃣ 编写 Dockerfile

2️⃣ 构建镜像

3️⃣ 验证构建结果

五、Dockerfile 实战一:自定义 Nginx 镜像

构建镜像:

启动容器:

六、Dockerfile 实战二:Spring Boot 应用镜像

七、Dockerfile 实战三:多阶段构建(优化镜像体积)

八、Dockerfile 优化技巧

九、Dockerfile 调试与验证

查看构建历史

模拟逐层构建

进入容器调试

十、示例:自定义 LNMP 环境

十一、.dockerignore 文件

十二、总结

前言

在前面几章中,我们通过 docker run 拉取官方镜像来运行容器。 但在实际企业环境中,我们往往需要 自定义镜像 —— 例如将自己的应用、配置文件、环境变量、依赖包都打包成一个镜像,方便快速部署。

Docker 官方为此提供了标准化的构建文件: Dockerfile


一、Dockerfile 是什么

Dockerfile 是一个包含 镜像构建指令 的文本文件, 每一条指令都代表构建镜像的一层(Layer)。

一句话理解: Dockerfile = 自动化的镜像配方。


二、Dockerfile 文件结构

基本语法格式:

# 注释行
INSTRUCTION argument

指令区分大小写,通常写为大写。


三、常用 Dockerfile 指令详解

指令作用示例
FROM指定基础镜像FROM centos:7
MAINTAINER镜像维护者信息(已过时,用 LABEL 替代)LABEL maintainer="uuz"
LABEL添加元数据标签LABEL version="1.0"
RUN执行命令RUN yum -y install nginx
WORKDIR设置工作目录WORKDIR /usr/local/app
COPY从宿主机复制文件到镜像COPY app.jar /app/app.jar
ADD类似 COPY,但支持解压和 URLADD nginx.tar.gz /usr/local/
EXPOSE声明容器暴露端口EXPOSE 8080
ENV设置环境变量ENV JAVA_HOME=/usr/local/java
ENTRYPOINT容器启动时执行命令(固定入口)ENTRYPOINT ["java", "-jar", "app.jar"]
CMD提供默认参数(可被覆盖)CMD ["--server.port=8080"]
USER指定运行用户USER nginx
VOLUME定义挂载点VOLUME ["/data"]

四、Dockerfile 构建流程

1️⃣ 编写 Dockerfile

创建一个新目录并进入:

mkdir /opt/dockerfile-demo && cd /opt/dockerfile-demo

创建文件:

vim Dockerfile

2️⃣ 构建镜像

docker build -t mynginx:1.0 .

说明:

  • -t 指定镜像名和标签

  • . 表示当前目录(包含 Dockerfile)


3️⃣ 验证构建结果

docker images

运行容器:

docker run -d -p 8080:80 mynginx:1.0

五、Dockerfile 实战一:自定义 Nginx 镜像

# 使用基础镜像
FROM nginx:latest
​
# 维护者信息
LABEL maintainer="docker-study"
​
# 复制网页文件到镜像中
COPY index.html /usr/share/nginx/html/index.html
​
# 暴露端口
EXPOSE 80
​
# 启动命令
CMD ["nginx", "-g", "daemon off;"]

构建镜像:

docker build -t mynginx:v1 .

启动容器:

docker run -d -p 8080:80 mynginx:v1

访问测试:

http://localhost:8080

六、Dockerfile 实战二:Spring Boot 应用镜像

项目结构示例:

springboot-app/
├── Dockerfile
├── app.jar

Dockerfile 内容:

FROM openjdk:8-jdk-alpine
LABEL maintainer="docker-study"
WORKDIR /app
COPY app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像:

docker build -t springboot-app:v1 .

运行容器:

docker run -d -p 8080:8080 springboot-app:v1

✅ 一条命令打包并运行 Spring Boot 应用。


七、Dockerfile 实战三:多阶段构建(优化镜像体积)

场景: 构建 Go / Node / Java 应用时,编译环境庞大,不适合直接放入生产镜像。

解决方法:多阶段构建

# 第一阶段:编译阶段
FROM golang:1.19 AS builder
WORKDIR /build
COPY . .
RUN go build -o app .
​
# 第二阶段:运行阶段
FROM alpine:3.19
WORKDIR /app
COPY --from=builder /build/app .
EXPOSE 8080
ENTRYPOINT ["./app"]

✅ 优点:最终镜像只有运行程序,无需编译依赖。 典型用于 Java、Go、前端项目。


八、Dockerfile 优化技巧

优化点方法示例
减少层数合并多条 RUN 指令RUN apt-get update && apt-get install -y vim
清理缓存构建后删除临时文件RUN rm -rf /var/lib/apt/lists/*
合理使用 .dockerignore排除无关文件node_modules/, .git/
选择轻量镜像使用 alpine 系列FROM nginx:alpine
多阶段构建编译与运行分离COPY --from=builder ...

九、Dockerfile 调试与验证

查看构建历史

docker history mynginx:1.0

模拟逐层构建

docker run -it --rm  /bin/sh

进入容器调试

docker exec -it  /bin/bash

十、示例:自定义 LNMP 环境

FROM centos:7
​
RUN yum -y install epel-release && \   yum -y install nginx mysql php php-fpm && \   mkdir -p /usr/share/nginx/html
​
COPY index.php /usr/share/nginx/html/index.php
​
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

构建并运行:

docker build -t lnmp:v1 .
docker run -d -p 80:80 lnmp:v1

十一、.dockerignore 文件

防止无关文件进入镜像,提高构建效率。

示例:

.git
node_modules
*.log
tmp/

⚙️ 与 .gitignore 类似,用于排除不需要打包的文件。


十二、总结

通过本篇学习,你应掌握:

✅ Dockerfile 的语法与构建原理

✅ 常用指令与组合使用方式

✅ 构建自定义镜像的实战命令

✅ 镜像优化技巧与多阶段构建

✅ 实战案例:Nginx 与 Spring Boot 构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

https接口的支持判断,http升级到https需求

https接口的支持判断,http升级到https需求https接口的支持判断,http升级到https需求 1.以下是仅仅支持http,不支持https的提示。http://myapi.mytest.com:8081/pinganzong/getCity {"resCode":"999999&…

源杰科技国产激光器芯片-光模块源头

源杰科技(股票代码:688498.SH)是中国光芯片领域的核心企业,近年来在AI算力爆发、数据中心升级和国产替代加速的背景下,实现了从“电信市场承压”到“数通业务爆发”的战略转型。以下从公司概况、技术实力、产品布…

2025 年仿石漆厂家最新推荐榜,技术实力与市场口碑深度解析的优质企业精选批刮 / 别墅 / 批发 / 出口仿石漆推荐

引言 当前仿石漆行业规模持续扩大,市场中品牌数量激增,但产品质量、技术水平与服务能力却呈现显著差异。部分产品存在仿石效果失真、耐候性差、环保不达标等问题,不仅影响建筑外观持久性,还可能引发安全与健康隐患…

2025 年外墙涂料厂家最新推荐榜,技术实力与市场口碑深度解析外墙涂料工程 / 外墙涂料翻新推荐

引言 为精准筛选 2025 年优质外墙涂料品牌,建筑装饰装修材料协会联合行业权威检测机构开展专项测评,测评覆盖全国 120 余家涂料企业。测评采用 “三维九项” 评价体系,从技术实力(研发投入占比、专利数量)、产品性…

2025 年 10 月不锈钢厂家推荐排行榜,301不锈钢,316L不锈钢,304不锈钢,420不锈钢,201不锈钢,不锈钢材料公司推荐

2025年10月不锈钢厂家推荐排行榜:301不锈钢、316L不锈钢、304不锈钢、420不锈钢、201不锈钢材料公司推荐 一、行业背景与发展趋势 不锈钢材料作为现代工业的重要基础材料,在医疗设备、航空航天、家电厨具等领域的应用…

2025 年 10 月废水蒸发器厂家权威推荐榜:MVR/薄膜刮板/单效/双效/三效/多效/高盐/含盐/降膜/结晶/mvr母液/氯化钠/硫酸铵/垃圾渗滤液/化工废水刮板/强制循环/废水脱盐蒸发器厂家精选

2025 年 10 月废水蒸发器厂家权威推荐榜:MVR/薄膜刮板/单效/双效/三效/多效/高盐/含盐/降膜/结晶/mvr母液/氯化钠/硫酸铵/垃圾渗滤液/化工废水刮板/强制循环/废水脱盐蒸发器厂家精选 行业技术发展现状 随着环保政策的…

2025 年 10 月搅拌机厂家推荐排行榜,立式搅拌机,潜水搅拌机,双曲面搅拌机,桨式/框式/反应/电动/侧入式/水处理/加药搅拌机公司精选

2025 年 10 月搅拌机厂家推荐排行榜:立式、潜水、双曲面等搅拌机公司精选 行业背景与发展趋势 搅拌设备作为工业生产过程中的关键装备,在化工、环保、食品、制药等领域扮演着不可或缺的角色。随着我国制造业转型升级…

2025 年 10 月真空炉厂家推荐排行榜,真空热处理炉,真空回火炉,真空退火炉,真空时效炉,气淬炉,烧结炉,铜钨合金真空焊接炉公司推荐

2025年10月真空炉厂家推荐排行榜:专业解析与选择指南 在高端制造业快速发展的背景下,真空热处理设备作为关键工艺装备,其性能与稳定性直接影响产品质量。真空炉、真空热处理炉、真空回火炉、真空退火炉、真空时效炉…

2025 年 10 月通风管道厂家推荐排行榜,螺旋风管,不锈钢风管,镀锌板排烟风管,厨房酒店排烟风管,消音风管,共板法兰风管公司精选

2025 年 10 月通风管道厂家推荐排行榜:螺旋风管、不锈钢风管、镀锌板排烟风管、厨房酒店排烟风管、消音风管、共板法兰风管公司精选 随着建筑行业对通风系统要求的不断提高,通风管道作为关键组成部分,其质量与性能直…

2025年小型混凝土抹光机厂家权威推荐榜单:抹光机/小型抹光机 /大型抹光机源头厂家精选

在建筑工程建设中,混凝土抹光机是提升地坪施工质量与效率的核心设备。根据行业报告数据显示,全球混凝土抹光机市场正以年均3.0%的速度稳定增长,其中小型抹光机因操作灵活、适用场景广泛而占据重要市场份额。基于对国…

2025年靠谱的钛棒厂家最新TOP实力排行

2025年靠谱的钛棒厂家最新TOP实力排行钛棒行业概述钛棒作为一种高性能金属材料,因其优异的强度重量比、耐腐蚀性和生物相容性,在航空航天、医疗器械、化工和能源等领域有着广泛应用。随着中国制造业的升级转型,钛合…

2024ICPC南京VP记录

ICPC 南京 20242024 ICPC南京 VP(补题)记录 B - Birthday Gift 若两个 \(1\) 下标奇偶不同,则一定存在一种方法能删去奇数位置和偶数位置的一对 \(1\) ,\(0\) 是同理的。一次操作删除一个奇数位一个偶数位,两个元…

2025年比较好的木质门不锈钢合页厂家最新实力排行

2025年比较好的木质门不锈钢合页厂家最新实力排行在建筑装饰和家居装修领域,五金配件虽小却至关重要,尤其是门合页作为连接门扇与门框的关键部件,其质量直接影响到门的使用寿命和开关体验。随着消费者对家居品质要求…

使用Spring AI流式调用DeepSeek

1.新建MAVEN项目并引入依赖(MAVEN3.5+ JDK21+)1 <dependencies>2 <dependency>3 <groupId>org.springframework.boot</groupId>4 <artifactId>spri…

2025年天津自动化展公司权威推荐榜单:泵阀展/铸造与压铸展 /焊接与切割展源头公司精选

在2025年3月的国家会展中心(天津),一台搭载先进传感技术的灵巧手正进行精准抓取演示,其多达42个自由度吸引了众多专业观众驻足,这一幕正是天津自动化展商实力的缩影。 作为中国北方工业领域的风向标,天津自动化展…

开源赋能智慧能源管理:解析MyEMS的技术优势与实践价值

在“双碳”目标引领与数字化转型浪潮的双重推动下,能源管理已从传统的“事后统计”升级为“事前预测、事中管控、事后优化”的全流程智慧化模式。在此背景下,开源能源管理系统凭借其灵活可定制、成本可控等优势,逐渐…

机器学习:逻辑回归 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

不用ffmpeg如何将多个图片转换为视频

前言 最近在做DicomView里面的一个将多序列导出为视频的功能时,第一时间想到的是使用ffmpeg。 看了一下Radiant的,整个软件才不到10MB。如果我使用ffmpeg,那整个软件将会相当大。 查了一下资料,发现Windows自带了一…

2025年热门的泗水面粉机厂家最新用户好评榜

2025年热门的泗水面粉机厂家最新用户好评榜泗水面粉机行业概述泗水县作为中国重要的面粉机械生产基地,拥有悠久的制造历史和深厚的技术积累。2025年,随着全球粮食加工需求的持续增长,泗水面粉机械行业迎来了新的发展…

读书笔记摘抄:恋爱

0 我们是否具有吸引力,取决于我们对自身的投资程度,这就是不依赖性。我们通过脆弱来建立不依赖性,通过诚实来练习脆弱性。