首页/云/Docker 容器速查/FROM 指定基础镜像
镜像与构建107 条

FROM 指定基础镜像

每条 FROM 开启一个构建阶段并指定起点镜像;必需且至少一条,可带 AS 命名供其他阶段引用。

Docker 容器速查云更新于 2026-10-13

FROM 是什么

FROM 指定基础镜像并开启一个构建阶段:它是每条构建路径的起点,镜像里的文件系统、包管理器与运行时会从这一层继承下来。多阶段构建里每个 FROM 都是一个独立阶段,阶段之间用复制指令传递产物,最终镜像默认取最后一段。

基本信息

语法FROM IMAGE[:TAG|@DIGEST] [AS 阶段名]
位置要求必需且至少一条;之前只能出现构建期参数声明与注释
标签写法具体版本标签最常用,摘要最严格,latest 语义最模糊
阶段引用命名后用复制指令从该阶段取文件,也可用于指定构建目标
平台参数可指定目标平台,用于交叉构建多架构镜像

典型使用场景

  • 选定运行环境:按语言与版本挑选官方镜像,例如带版本号的语言运行时镜像
  • 拆分构建与运行:编译用完整工具链镜像,运行用精简镜像,成品体积大幅下降
  • 减少维护成本:使用发行版提供的最小变体,同时获得安全更新
  • 固定可复现环境:锁定具体版本标签或摘要,避免同一描述在不同时间产出不同结果
  • 引入自定义基础镜像:企业内部统一的基础镜像封装了证书、时区与安全基线

常见写法

常见写法
FROM alpine:3.20                    # 最小化的通用起点
FROM node:22-alpine AS builder      # 命名阶段,供后续阶段引用
FROM gcr.io/distroless/static-debian12:nonroot   # 只带运行时依赖的精简基础
# 多阶段组合
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app ./cmd/app

基础镜像怎么选

类型特点适用场景
完整发行版镜像工具齐全,体积大临时排查与需要包管理器的构建阶段
精简变体体积小,工具较少编译与运行兼顾的常规服务
无发行版镜像只有运行时与证书,无 shell追求小体积与低攻击面的最终镜像
私有基础镜像内置企业证书与安全基线内部合规要求统一维护的场景

选完之后的收尾动作

  • 确认标签是否存在且长期维护,避免选到已停止更新的分支
  • 核对架构与平台,本地构建与部署集群的处理器架构不一致时要在构建期指定
  • 检查镜像内是否已有可用的包管理器与证书,精简镜像往往需要额外补装
  • 固定版本后更新基础镜像要有节奏,长期不更新会积累安全补丁缺口
  • 内部基础镜像变更要与使用方打招呼,基础层改动会影响所有下游镜像
依赖浮动标签会让每次构建结果漂移。关键服务锁定具体版本号,对可复现性要求更高的场景按摘要引用。
构建路径里至少要有一条 FROM,并且它之前不能出现运行命令或复制文件这类指令,否则构建一开始就会失败。

基础镜像的长期维护

  • 记录每个服务的基线与版本,升级前先在小范围验证,再统一推进
  • 关注基础镜像的安全公告,重新构建往往就能拿到补丁,无需改业务代码
  • 先构建再回归,基础层变化可能影响动态链接库与证书链
  • 定期清理不再使用的基础镜像,避免本地与仓库堆积大量历史层
  • 内部基础镜像要有变更通知机制,使用方需要评估兼容性再跟随升级

易错点

  • 依赖语义模糊的标签,同一份描述今天和三个月后构建出的镜像内容不同,问题难以复现
  • 基础镜像选了已停止维护的版本,安全补丁长期缺失且不容易被意识到
  • 在 FROM 之前写运行命令或复制指令,构建直接失败,报错信息未必直白
  • 多阶段里阶段名重复或引用时大小写不一致,构建失败且定位成本高

数据来源与参考

  • Docker 官方文档:Dockerfile FROM(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌