使用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官方镜像仓库文档中进行解释。阅读“如何使用此镜像”和“镜像变体”部分将帮助您了解如何使用这些变体。