使用 Docker 官方镜像
Docker 建议您在项目中使用 Docker 官方镜像。
这些镜像文档清晰,推广最佳实践,并定期更新。
Docker 官方镜像支持大多数常见用例,使其非常适合 Docker 新用户。
高级用户也可以从更专业的镜像变体中受益,并将 Docker 官方镜像作为您 Dockerfile 学习过程的一部分进行审查。
标签
每个 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"]Alpine 镜像
许多 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 官方镜像仓库文档中进行了解释。阅读“如何使用此镜像”和“镜像变体”部分将有助于您了解如何使用这些变体。