Dockerfile 核心指令详解与最佳实践
一、Dockerfile 概述
Dockerfile 是构建 Docker 镜像的文本脚本,包含一系列指令。Docker 引擎会自上而下逐条执行这些指令,最终生成一个不可变的镜像。
1. 镜像、Layer 与容器的关系
- 镜像(Image):由多个只读 Layer 组成。
- Layer:每条 Dockerfile 指令通常生成一个 Layer,是不可变的增量快照。
- 容器:镜像 + 一层可写层(Container Layer)。
理解 Layer 机制对于构建缓存、镜像复用和瘦身至关重要。
2. Dockerfile 到 Layer 的真实映射
以以下示例为例:
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y curl
COPY app.sh /app/app.sh
生成的镜像层如下:
| 层号 | Dockerfile 指令 | Layer 内容 |
|---|---|---|
| 1 | FROM ubuntu | Ubuntu 文件系统 |
| 2 | RUN apt-get update | apt 缓存 |
| 3 | RUN apt-get install | curl 二进制 |
| 4 | COPY app.sh | app.sh 文件 |
注意:Dockerfile 不是合并执行,而是逐层叠加。修改上层指令会导致下层缓存失效。
二、Dockerfile 核心指令详解
1. FROM
FROM 用于指定基础镜像,必须是第一条有效指令。支持多阶段构建(Multi-stage Build)。
语法格式
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>@<digest> [AS <name>]
参数说明
| 参数 | 是否必需 | 含义 | 工程建议 |
|---|---|---|---|
<image> | 必需 | 基础镜像名称 | 使用可信镜像源 |
:<tag> | 推荐 | 镜像版本标签 | 生产必须指定版本,避免默认 latest |
@<digest> | 可选 | 镜像内容哈希 | 强一致性与安全 |
AS <name> | 可选 | 构建阶段命名 | 多阶段构建必用 |


