为什么Docker镜像链接包含多个版本和标签



希望这不是一个愚蠢的问题。当查看Docker镜像时,特别是从官方存储库中,它们为每个Docker文件列出了多个版本和标签。例如:

9.1.6-php8.0-apache-buster, 9.1-php8.0-apache-buster, 9-php8.0-apache-buster, php8.0-apache-
buster, 9.1.6-php8.0-apache, 9.1-php8.0-apache, 9-php8.0-apache, php8.0-apache, 9.1.6-apache-
buster, 9.1-apache-buster, 9-apache-buster, apache-buster, 9.1.6-apache, 9.1-apache, 
9-apache, apache, 9.1.6, 9.1, 9, latest, 9.1.6-php8.0, 9.1-php8.0, 9-php8.0, php8.0

我的问题是,为什么他们在链接中列出了这么多版本的变体(即9.1.6-hp8.0-apache-buster和9.1-php8.0-apache-bustter等(?我不确定这是为了搜索和蜘蛛(尽管它不需要像它们那样包含在链接中(,还是因为每个dockerfile都可以修改为这些版本?(如果是,怎么做?(。例如,上面的drupal dockerfile支持9-9.1.6,并且dockerfile可以调整到该版本。TBH,如果只是为了搜索索引,主要是让人困惑他们为什么要这样做链接,因为它看起来支持多个版本的东西。

如今,这些标签可能都指向同一个图像。然而,明天可能会发布9.1.7,届时,所有9.1.6图像将保持不变,并使用9.1和9等通用标签构建一组新的9.1.7图像。此外,当9.2.0发布,或者php8.1发布,或者debian的下一个版本发布时,这些都可能是应用程序的突破性变化。所以在你的Dockerfile中,你可能会说:

FROM ${BASE}:9.1-php8.0-apache-buster

这样,当它发布时,你会得到9.1.7,但不会得到9.2.0,当它稳定时,你不会意外地被转移到nginx,或者从buster升级到牛眼。你的应用程序能够容忍的变化越多,你的基本图像标签就越通用。其中一项更改可能会破坏您的应用程序。

你可以非常具体,并固定到一个不会自动更新的确切基本映像,但当安全漏洞在较新的基本映像中被修补时,你的子映像仍然很脆弱,因为它被锁定到一个无法接收更新的旧基本映像。

最新更新