当前位置: 首页 > news >正文

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

前言

一、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.gsyq.cn/news/34844.html

相关文章:

  • 2025年靠谱的钛棒厂家最新TOP实力排行
  • 2024ICPC南京VP记录
  • 2025年比较好的木质门不锈钢合页厂家最新实力排行
  • 2025年天津自动化展公司权威推荐榜单:泵阀展/铸造与压铸展 /焊接与切割展源头公司精选
  • 不用ffmpeg如何将多个图片转换为视频
  • docker /overlay2/xxx/merged 爆满
  • 2025年热门的高定衣柜灯厂家推荐及选择指南
  • 完整教程:C语言自学--自定义类型:联合和枚举
  • 微信小程序中的H5网页在关怀模式下页面排版变乱的解决办法
  • 2025年比较好的opp束带母卷热门厂家推荐榜单
  • [JXCSP-S-S2019 江西] 多叉堆
  • 【工业检测行业案例】借助TeeChart打造高精度材料强度可视化测试系统
  • 2025年质量好的化工厂清淤机器人厂家最新权威实力榜
  • 保存AlertDialog引用,用于在AlertDialog的view里的按钮点击时关闭这个dialog
  • 2025年优质的印字封箱胶带TOP实力厂家推荐榜
  • 2025年耐热钢工装厂家推荐榜:耐热钢/多用炉/真空炉/井式炉耐热钢工装/聚焦耐久与效能,助力热处理工艺升级
  • 2025年靠谱的徐州煤棚网架实力厂家TOP推荐榜
  • 2025年济南艺考文化课培训优质机构推荐:助力艺考生高效冲刺,济南艺考文化课培训机构,山东艺考文化课培训机构推荐
  • 2025工业一体机品牌实用推荐:从场景适配看选型价值,嵌入式一体机,悬臂式一体机厂家推荐
  • 2025年上海企业注册代办服务公司推荐榜:上海注册公司办理营业执照公司,助力初创企业精准启航
  • 揭秘Deepseek:只用GPT-4成本的6%,却做出更聪明的AI?
  • C++项目指定依赖路径
  • 2025 年 10 月气缸管厂家推荐排行榜,精密气缸管,不锈钢气缸管,珩磨气缸管,薄壁气缸管,焊接气缸管,冷拔气缸管,食品级气缸管,海洋用气缸管公司推荐
  • 2025 年 10 月三层绝缘线厂家推荐排行榜,东特/大亚/TOTOKU/古河/TIW-2/TIW-3/TIW-4/TIW-E/TIW-2S/TEX-E 三层绝缘线公司推荐
  • 2025年10月精华液推荐榜:淡斑提亮多效精华权威排名发布
  • 2025年读书郎深度解析:26年教育科技长跑的硬实力与隐忧,
  • 2025年10月郑州遗产继承律师选择榜:五强机构公开数据对比与排行
  • 专家并行和其他并行策略对比
  • 2025年热门的坐骑式割草机厂家推荐及选购指南
  • ppt导出高清图片pdf的方法!