Dockerfile内容基础知识
Dockerfile 是 Docker 镜像构建的 “脚本文件”,它通过一系列指令定义了镜像的构建步骤,遵循以下核心规则:
1.每条保留字(如:FROM/RUN/COPY)指令都必须为大写字母且后面要跟随至少一个参数。
例如:FROM ubuntu:22.04、COPY ./app /usr/local/app。
2.指令按照从上到下的顺序依次执行。
3.注释 #
使用 # 开头的内容为注释,不会被执行。合理添加注释可以提高 Dockerfile 的可读性,便于团队协作与后续维护。例如:# 安装 Python 运行时环境。
4. 每条指令都会创建一个新的镜像层并对镜像进行提交。
这种分层机制是 Docker 镜像高效复用、增量构建的核心。相同的镜像层会被缓存,后续构建时可直接复用,大幅提升构建效率。

Dockerfile镜像构建过程
Docker 引擎会将 Dockerfile 中的指令转化为镜像的分层构建步骤,完整流程如下:
1. 基于基础镜像创建构建容器;
Docker 守护进程首先加载基础镜像(由 FROM 指令指定),并基于该镜像创建一个临时的构建容器,作为后续指令的执行环境。
2. 执行单条Dockerfile指令,修改容器文件系统;
例如
RUN apt install -y python3
会在容器内安装 Python,COPY 会将本地文件复制到容器中,这些操作都会修改容器的文件系统。
3. 提交容器变更为新的镜像层;
该层会被缓存,若后续构建时指令未发生变化,可直接复用缓存层,避免重复执行。
4. 基于新镜像层创建新的构建容器;
5. 迭代执行剩余指令,直至Dockerfile指令全部完成。
重复步骤 2-4,直到 Dockerfile 中的所有指令执行完毕。最终,基于最后一个镜像层生成目标镜像,并清理所有临时构建容器。
Dockerfile扩展优化小技巧
1. 利用缓存加速构建
避免在指令前频繁修改无关内容(如注释),否则会导致缓存失效。将变化频率低的指令(如基础镜像、依赖安装)放在 Dockerfile 前部,变化频率高的指令(如代码复制)放在后部。
2. 减少镜像层数
合并同类指令(如将多个 RUN 命令用 && 连接),减少不必要的镜像层,降低镜像体积
3. 多阶段构建优化
使用 FROM ... AS builder 定义构建阶段,在构建阶段编译代码、安装依赖,再将产物复制到运行阶段的镜像中,最终生成仅包含运行时环境的轻量镜像。
4. 指定非 root 用户运行
通过 RUN useradd -m appuser 和 USER appuser 指令,让容器以普通用户身份运行,提升安全性
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程