【问题标题】:Best practice for dockerfile maintain?dockerfile 维护的最佳实践?
【发布时间】:2018-08-26 08:33:03
【问题描述】:

我有一个Dockerfile,如下所示:

FROM openjdk:8u151

# others here

我有 2 个关于基本映像的问题:

1。如何获取标签?

通常,我从 dockerhub 获取它,比如说 openjdk:8u151,我可以从 dockerhub's openjdk repository 获取它。

如果我可以从任何本地docker命令中获取所有标签,那么我不需要访问web来获取标签,效率真的有点低吗?

2。基础镜像安全吗?

我的意思是如果我的基本图像总是在那里?

看上面的openjdk repo,是官方repo。

我发现只有8u151 可供我选择。但我认为在此过程中应该有很多jdk8 发布,所以那里也应该有很多jdk8 图像,例如8u1018u163 等。

我猜维护者会删除openjdk 的一些旧图像吗? 那么如果发生这种情况,我的Dockerfile 是如何工作的?如果我的上游删除那里的图像,我应该始终更改我的基本图像吗?维持这种东西对我来说真的很糟糕。

即使openjdk 真的只是生成jdk8 的一个版本。我的困惑仍然无法避免,因为dockerhub 确实为用户提供了delete 按钮。

什么是最佳做法,请提出建议,谢谢。

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    如何获取标签?

    见“How to list all tags for a Docker image on a remote registry?”。
    API就够了

    例如,访问:

    https://registry.hub.docker.com/v2/repositories/library/java/tags/?page_size=100&page=2

    基础镜像安全吗?

    只要您将自己构建的镜像保存在注册表中(rpublic 镜像或自托管镜像),是的:您至少可以基于您所做的镜像构建新镜像。
    或者,即使基础镜像消失了,您自己的镜像中仍然有它的层,并且可以重新标记它(前提是构建缓存可用)。
    参见例如“Is there a way to tag a previous layer in a docker image or revert a commit?”。
    请参阅“can I run an intermediate layer of docker image?”中的注意事项。

    【讨论】:

    • 让我理解provided the build cache is available。如果我在我的电脑上构建我的图像,我可以在我的电脑上看到openjdk:8u151 图像,然后即使 dockerhub 上的图像被删除,我也可以重新标记它。但是,如果我不再能够登录我的电脑,我无法重新标记基础层,就像我的旧图像docker pull,我看不到openjdk:8u151,所以我不能再构建我的图像(当然我仍然可以使用我的旧图像,但无法重新构建?)
    • 在你推荐的arctical里,我看到了What it means is that you won't have access to the build layers unless you built this image in the current machine or exported and loaded by combining:,这是否意味着我需要保留我的构建机器?
    • @lagom 保留您的构建机器或导出您的图像,在某处保存为存档(tar),以保留图层。
    猜你喜欢
    • 2017-12-22
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2023-03-12
    • 2011-08-04
    • 2011-03-31
    相关资源
    最近更新 更多