选对基础镜像至关重要:优先使用官方镜像(如python:3.11-slim)、锁定具体版本或摘要、匹配运行需求(如Go用scratch、依赖glibc用debian:slim)、多阶段构建中区分构建与运行阶段镜像。

选对基础镜像,等于给容器打好了地基。FROM 不是随便写一行就完事的指令,它直接决定镜像体积、安全水位、兼容性表现和后续维护成本。
看是否来自可信源
优先用官方镜像,比如 python:3.11-slim、nginx:1.25-alpine,它们在 docker.io/library/ 下,自动解析为可信 registry。避免写 FROM myapp-base 这类无 registry 前缀的镜像,Hadolint 的 DL3026 规则会直接报错。私有镜像要带完整地址,例如 FROM registry.example.com/base/python:3.11。
看标签是否明确锁定
不用 latest,这是最常见也最危险的习惯。应选择带具体版本或摘要的写法:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
-
FROM node:18.19.0-alpine3.18—— 版本+发行版双锁定 -
FROM python@sha256:7a1f9b4e...—— 摘要校验,杜绝镜像被篡改或覆盖 - 避免
FROM ubuntu或FROM debian:stable—— 标签语义模糊,行为不可控
看是否匹配运行需求
不是越小越好,也不是功能越多越稳,得看实际用途:
- 静态二进制服务(如 Go 编译后程序)→ 用
scratch或distroless - 需要
apk/apt调试或装额外工具 → 选alpine或ubuntu - 依赖 glibc 或复杂动态库 → 避免
alpine(musl libc),改用debian:slim
看是否适配多阶段构建
如果项目需编译(Go/Java/Node.js 等),FROM 应分角色设计:
- 构建阶段:用带完整工具链的镜像,如
golang:1.22、node:20 - 运行阶段:切换至极简镜像,如
alpine:3.20或distroless:nonroot - 通过
AS builder和COPY --from=builder实现产物传递
不复杂但容易忽略

















