Dockerfile内容基础知识

Dockerfile 是 Docker 镜像构建的 “脚本文件”,它通过一系列指令定义了镜像的构建步骤,遵循以下核心规则:

1.每条保留字(如:FROM/RUN/COPY)指令都必须为大写字母且后面要跟随至少一个参数。

例如:FROM ubuntu:22.04、COPY ./app /usr/local/app。

2.指令按照从上到下的顺序依次执行。

3.注释 #

使用 # 开头的内容为注释,不会被执行。合理添加注释可以提高 Dockerfile 的可读性,便于团队协作与后续维护。例如:# 安装 Python 运行时环境。

4.   每条指令都会创建一个新的镜像层并对镜像进行提交。

这种分层机制是 Docker 镜像高效复用、增量构建的核心。相同的镜像层会被缓存,后续构建时可直接复用,大幅提升构建效率。

Docker Dockerfile构建图文详解

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 指令,让容器以普通用户身份运行,提升安全性

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)