Tag 含义¶
镜像的 TAG 不仅仅是一个版本号,它更像一个标签,这个镜像的完整“配方”。主要包括以下几个方面:
- 基础操作系统/环境
- 运行时版本(如 JDK)
- 软件本身版本
- 变体(如是否精简)
1. 基础操作系统/环境 (The Base)¶
这是标签中最常见的部分,指明了镜像基于哪个操作系统或环境构建
alpine:¶
- 含义:基于 Alpine Linux。
- 特点:极度轻量(一个基础镜像只有 5MB 左右),安全性高(使用 musl libc 和 busybox,攻击面小)。这是追求小镜像体积时的首选。
- 例子:tomcat:9.0-jre11-alpine(一个包含 Tomcat 和 JRE 的镜像可能只有 100MB 左右)。
bullseye, buster, bookworm, noble, jammy, focal:¶
-
含义:这些都是 Debian 或 Ubuntu 的发行版代号。
-
- bullseye, buster, bookworm 是 Debian 的版本(11, 10, 12)。
-
noble (24.04), jammy (22.04), focal (20.04) 是 Ubuntu 的版本。
-
特点:软件包丰富,兼容性好,社区支持强大,镜像体积相对较大。是很多官方镜像的默认选择。
-
例子:node:18-bullseye(基于 Debian 11 的 Node.js 18 镜像)。
ubi9, ubi8, ubi9-minimal:¶
- 含义:基于 Red Hat 的 Universal Base Image。
- 特点:企业级,免费使用,有红帽的支持和安全更新,是 CentOS 的最佳替代品。
2. 运行时版本 (The Runtime)¶
对于需要运行环境的软件(如 Java, Python, Node.js),标签会指明具体使用哪个运行时及其版本
temurin:¶
- 含义:使用 Eclipse Temurin 提供的 JDK/JRE。这是之前 adoptopenjdk 的延续,由 Eclipse 基金会管理,是目前最推荐、最通用的开源 JDK 发行版。
- 例子:tomcat:9.0-jdk17-temurin(基于默认基础系统,使用 Temurin 的 JDK 17)。
corretto:¶
- 含义:使用 Amazon Corretto。是亚马逊提供的免费、多平台、生产就绪的 OpenJDK 发行版。
- 例子:tomcat:9.0-jdk8-corretto。
openjdk:¶
- 含义:使用操作系统自带的 OpenJDK 包(如用 apt-get install openjdk-11-jdk 安装的)。现在更倾向于使用 temurin 等专为容器优化的发行版。
jdkXX, jreXX:¶
- 含义:指明 Java 的版本和类型。
- jdk17: 包含 Java Development Kit (开发工具包),体积较大。
- jre17: 只包含 Java Runtime Environment (运行时环境),体积较小,适合生产环境。
- 例子:tomcat:9.0-jre17-temurin(比 jdk17 变体更小)
3. 软件本身版本 (The Software)¶
这是最核心的版本号,指明镜像中主软件的版本。
9.0, 10.1, latest:¶
- 含义:Tomcat 的主版本号。
- latest: 是一个浮动标签,总是指向最新稳定版。不建议在生产环境中使用,因为可能导致不可预知的升级。
4. 变体/后缀 (The Variant/Suffix)¶
一些额外的后缀指明了镜像的特殊属性。
-slim:¶
- 含义:精简版。通常只包含运行该软件所需的最最小依赖包。它比 alpine 大,但比完整版小很多,是基于 Debian/Ubuntu 系统的一个很好的折中方案。
- 例子:python:3.11-slim-bullseye。
-alpine:¶
- 含义:如上所述,基于 Alpine Linux,是最小的变体。
没有后缀:¶
- 含义:通常是该版本的默认构建。对于很多镜像来说,默认构建就是基于 Debian 的“完整”版本,包含了构建和调试常用的工具(如 curl, vim等),因此体积最大。
如何组合?—— 解读一个复杂的 TAG¶
现在我们来解读一个复杂的标签,例如:
tomcat:9.0.87-jdk17-temurin-jammy
这个标签可以拆解为:
- 9.0.87: 软件版本 - Tomcat 9.0.87
- jdk17: 运行时版本和类型 - Java 17 JDK
- temurin: 运行时提供商 - 由 Eclipse Temurin 提供
- jammy: 基础操作系统 - Ubuntu 22.04 LTS
所以,这个镜像就是一个“基于 Ubuntu 22.04 系统,使用 Eclipse Temurin 的 JDK 17 来运行 Tomcat 9.0.87”的镜像。
最佳实践
永远不要在生产环境使用 latest 标签。总是拉取指定了完整版本号的镜像,以确保环境的一致性。