使用 Docker 官方镜像

Docker 建议您在项目中使用 Docker 官方镜像。 这些镜像具有清晰的文档,可推广最佳实践,并定期更新。 Docker 官方镜像支持最常见的使用案例,非常适合 Docker 新用户。 高级用户可以从更专业的镜像变体中受益,并在学习过程中查看 Docker 官方镜像。Dockerfile

标签

每个 Docker 官方镜像的存储库描述都包含 Supported tags and 相应的 Dockerfile links 部分,其中列出了所有 current 标记,其中包含指向创建镜像的 Dockerfile 的链接 标签。本部分的目的是显示哪些镜像变体可用。

Example: supported tags for Ubuntu

同一行中列出的标记都引用相同的底层镜像。倍数 标记可以指向同一镜像。例如,在上一个截取的屏幕截图中 从 Docker 官方镜像存储库中,标记 、 、 和 都引用同一镜像。ubuntu24.04noble-20240225nobledevel

Docker 官方镜像的标签通常经过优化,以便于使用 并包含各种有用的软件,例如开发人员和构建工具。 通过将镜像标记为 ,镜像维护者本质上是在建议 该镜像将用作默认镜像。换句话说,如果您不知道要用什么标签 使用或不熟悉底层软件,您可能应该从 镜像。随着您对软件和镜像变体的理解不断深入, 您可能会发现其他镜像变体更适合您的需求。latestlatestlatest

纤薄的镜像

许多语言堆栈(如 Node.jsPythonRuby)都有标签变体 旨在提供轻量级、生产就绪的基本镜像 包裹更少。slim

镜像的典型使用模式是作为多阶段生成最后阶段的基础镜像。 例如,您在构建的第一阶段构建应用程序 使用变体,然后将您的应用程序复制到最终的 阶段。下面是一个示例 。slimlatestslimDockerfile

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 Linux 发行版之上,而不是 Debian 或 Ubuntu 之上。Alpine Linux 专注于提供 一个小型、简单且安全的容器镜像基础,以及 Docker 官方 Images 变体通常旨在仅安装必要的软件包。作为 因此,Docker 官方镜像变体通常更小 比变体。alpinealpinealpineslim

需要注意的主要警告是 Alpine Linux 使用 musl libc 而不是 glibc。此外,为了 最小化镜像大小,基于 Alpine 的镜像包含工具的情况并不常见 例如 Git 或 Bash。根据 libc 要求的深度或 假设,您可能会发现自己遇到问题,因为 缺少库或工具。

当您使用 Alpine 镜像作为基础时,请按顺序考虑以下选项 要使您的程序与 Alpine Linux 和 musl 兼容,请执行以下操作:

  • 使用 musl libc 编译程序
  • 将 glibc 库静态链接到您的程序中
  • 完全避免依赖 C 语言(例如,在没有 CDO 的情况下构建 Go 程序)
  • 在 Dockerfile 中添加您自己需要的软件。

请参阅上的镜像描述 Docker Hub 有关如何安装包的示例(如果您不熟悉)。alpine

代号

带有看起来像《玩具总动员》角色的单词(例如 、 和 )或形容词(例如 、 和 )的标签表示它们用作基础的 Linux 发行版的代号 镜像。Debian 发行版的代号基于《玩具总动员》中的角色, Ubuntu 采用“形容词动物”的形式。例如, Ubuntu 24.04 的代号是“Noble Numbat”。bookwormbullseyetrixiefocaljammynoble

Linux 发行版指标很有帮助,因为许多 Docker 官方镜像 提供基于多个底层分发版本构建的变体(对于 example 和 )。postgres:bookwormpostgres:bullseye

其他标签

Docker Official Images 标签可能包含其他提示,以达到 它们的 image 变体以及此处描述的变体。通常这些 标签变体在 Docker 官方镜像存储库中进行了解释 文档。通读 “如何使用此镜像” 和 “镜像变体”部分将帮助您了解如何使用这些 变种。