使用 Docker 官方镜像
Docker 建议您在项目中使用 Docker 官方镜像。这些图像有清晰的文档,促进最佳实践,并且定期更新。 Docker 官方镜像支持最常见的用例,非常适合 Docker 新用户。高级用户可以从更专业的镜像变体中受益,并在Dockerfile
学习过程中查看 Docker 官方镜像。
标签
每个 Docker 官方镜像的存储库描述都包含受 支持的标签和相应的 Dockerfile 链接部分,其中列出了所有当前标签以及使用这些标签创建镜像的 Dockerfile 的链接。本节的目的是展示哪些图像变体可用。


同一行列出的标签均引用相同的底层图像。多个标签可以指向同一个图像。例如,在上一张取自ubuntu
Docker 官方镜像存储库的屏幕截图中,标签24.04
、
noble-20240225
、noble
和devel
全部引用同一个镜像。
Docker 官方镜像的标签latest
通常会针对易用性进行优化,并包含各种有用的软件,例如开发人员和构建工具。通过将图像标记为latest
,图像维护者实质上是建议将图像用作默认图像。换句话说,如果您不知道使用什么标签或者不熟悉底层软件,您可能应该从图像开始latest
。随着您对软件和图像变体的了解不断加深,您可能会发现其他图像变体更适合您的需求。
苗条的图像
许多语言堆栈(例如
Node.js、
Python和
Ruby )都具有slim
标签变体,旨在通过更少的包提供轻量级、可用于生产的基础映像。
图像的典型消费模式是作为多阶段构建slim
的最后阶段的基础图像
。例如,您在构建的第一阶段使用变体构建应用程序,然后根据变体将应用程序复制到最后阶段。这是一个例子。latest
slim
Dockerfile
FROM node:latest AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . ./
FROM node:slim
WORKDIR /app
COPY --from=build /app /app
CMD ["node", "app.js"]
高山图片
许多 Docker 官方镜像存储库也提供alpine
变体。这些镜像构建在
Alpine Linux
发行版之上,而不是 Debian 或 Ubuntu。 Alpine Linux 专注于为容器镜像提供小型、简单且安全的基础,而 Docker 官方镜像alpine
变体通常旨在仅安装必要的软件包。因此,Docker 官方镜像alpine
变体通常比slim
变体还要小。
需要注意的主要警告是 Alpine Linux 使用 musl libc 而不是 glibc。此外,为了最小化镜像大小,基于 Alpine 的镜像默认包含 Git 或 Bash 等工具的情况并不常见。根据程序中 libc 要求或假设的深度,您可能会发现自己因缺少库或工具而遇到问题。
当您使用 Alpine 镜像作为基础时,请考虑以下选项以使您的程序与 Alpine Linux 和 musl 兼容:
- 针对 musl libc 编译您的程序
- 将 glibc 库静态链接到您的程序中
- 完全避免 C 依赖(例如,构建没有 CGO 的 Go 程序)
- 在 Dockerfile 中添加您自己需要的软件。
如果您不熟悉,请参阅Docker Hub 上的alpine
镜像
描述,了解如何安装软件包的示例。
代号
带有看起来像《玩具总动员》角色(例如,bookworm
、
bullseye
和trixie
)或形容词(例如focal
、jammy
和
noble
)的单词的标签表示它们用作基础映像的 Linux 发行版的代号。 Debian 的发行代号
基于《玩具总动员》中的角色,而 Ubuntu 的代号则采用“形容词动物”的形式。例如,Ubuntu 24.04 的代号是“Noble Numbat”。
Linux 发行版指示器非常有用,因为许多 Docker 官方映像提供了基于多个底层发行版版本构建的变体(例如postgres:bookworm
和postgres:bullseye
)。
其他标签
除了此处描述的内容之外,Docker 官方镜像标签可能还包含有关其镜像变体用途的其他提示。通常,这些标签变体在 Docker 官方镜像存储库文档中进行了解释。阅读“如何使用此图像”和“图像变体”部分将帮助您了解如何使用这些变体。