我正在尝试使用Docker,并且无法理解一件事 - docker标签。我将展示一个例子:
我想使用,比如openjdk:8u91-jdk
,因为我想构建并测试我们在生产中的版本。但是,当我尝试从此图片创建容器时,无法下载它,因为它无法在Dockerhub上找到。
同样,假设我现在使用最新的openjdk:8u102-jdk
,并为此升级生产系统。在某些时候,必然会有图像更新,突然我的构建将停止工作?
我不想只使用openjdk:8-jdk
,因为我不知道将用于构建的内容。
我想我错过了什么。如何使用特定的先前版本的图像?
答案 0 :(得分:0)
您可以接受Dockerfile并更新JAVA_VERSION和JAVA_DEBIAN_VERSION环境变量以反映您要使用的OpenJDK版本,然后自行构建。
答案 1 :(得分:0)
所有标记都指向某组文件系统层,这意味着底层内容可以随时更改。这是其他容器化供应商和appC规范正在努力解决的问题之一,通常是使用类似于git commit hash的东西。
但是,在管理良好的公共Docker容器存储库中,大多数时候会有一些抽象无法使用静态标记来引用。
从OpenJDK repo的标签看,你似乎很幸运。
标签(通常)的结构如下:
latest
:指向最新版本的最新稳定版本。 这通常是动态的
8-alpine
:指向版本8的最新稳定版本,使用Alpine Linux作为发行版这通常是动态的
8u92-alpine
:指向版本8的特定版本。通常只会重建以包含安全补丁
这意味着如果你想绑定到8u92-alpine,你所要做的就是在使用你的docker命令时引用那个特定的标签(openjdk:8u92-alpine
)。
所有这一切,如果你真的需要8u91
,即使openjdk repo中没有标记的版本,你仍然可以查看Dockerfile for 8u91 ,建立它,并自己推动它。