FROM指令是Dockerfile中必须且首条的指令,用于指定基础镜像,如alpine:3.18或python:3.11-slim;必须明确标签、优先选官方轻量镜像,多阶段构建可切换不同基础镜像,并通过docker build --pull确保拉取最新层。

Docker 容器本身不直接使用“基础镜像命令”,真正涉及“基础镜像”的操作全在镜像(Image)层面——因为容器是镜像的运行实例,而基础镜像(base image)指的是 FROM 指令指定的那个起始镜像,比如 ubuntu:22.04、alpine:3.18 或 node:18-slim。你无法对“容器”执行“设置基础镜像”这类操作;所有与基础镜像相关的动作,都发生在构建(docker build)或拉取(docker pull)阶段。
下面从实际用途出发,分三类讲清楚怎么用好基础镜像相关命令:
怎么选和拉取合适的基础镜像
选错基础镜像会导致体积大、漏洞多、启动慢。关键看三点:轻量、官方、适配架构。
- 优先用官方精简版:
docker pull alpine:3.18(约 6MB)比docker pull ubuntu:22.04(约 70MB)更轻量 - 确认平台兼容性(尤其在 Apple Silicon 或 ARM 服务器上):
docker pull --platform linux/amd64 python:3.11-slim - 查找并验证镜像来源:
docker search --filter is-official=true nginx
✅ 显示OFFICIAL [OK]才代表 Docker 官方维护
怎么在构建时正确指定和优化基础镜像
Dockerfile 中的 FROM 是唯一决定基础镜像的指令,它必须是第一行。
写法要带明确标签,避免隐式
latest:FROM python:3.11-slim✅FROM python❌(可能意外升级导致构建失败)-
多阶段构建中可换多个基础镜像:
# 构建阶段用含编译工具的镜像 FROM golang:1.22 AS builder COPY . /app RUN cd /app && go build -o myapp . # 运行阶段用极简镜像 FROM alpine:3.18 COPY --from=builder /app/myapp /usr/local/bin/myapp CMD ["myapp"]
构建时强制更新基础层(防止缓存旧版):
docker build --pull -t myapp .
怎么检查和管理本地已有的基础镜像
拉下来或构建完的镜像,都存在本地,需定期清理冗余版本。
- 查看哪些镜像是被当前
Dockerfile实际用到的:docker images | grep -E "(alpine|python|nginx)" - 删除未被任何镜像引用的悬空镜像(
<none>标签):docker image prune - 清理全部未使用的镜像(包括悬空 + 未被容器引用的):
docker image prune -a - 查看某镜像的底层信息,确认是否为预期基础镜像:
docker inspect alpine:3.18 | jq '.[0].RepoTags, .[0].Os, .[0].Architecture'
不复杂但容易忽略:基础镜像不是配置项,而是构建链的起点。选得准、拉得稳、查得清,后续所有容器行为才可控。


















