【问题标题】:What are the best practices for tagging Docker Hub versions标记 Docker Hub 版本的最佳实践是什么
【发布时间】:2016-07-03 18:16:35
【问题描述】:

我有一个运行应用程序的 Docker Hub 容器。通常它会通过克隆源 git repo 来运行应用程序,但如果我想运行特定版本,应用程序已经标记了各种版本。例如我可以做一个

git clone https://github.com/author/application.git
git checkout release-1.0.0

作为 Docker Hub 维护者,我想将软件的版本与容器一起镜像。除了在发布时手动执行之外还有其他选择吗?

现在我的 Dockerfile 包含如下内容:

ENV APP_VER=2.0.0
RUN git clone ...; git checkout ${APP_VER}

在这个例子中,我会保留一个 docker 文件的标记分支,它将 APP_VER 设置为 2.1.0,然后 Docker Hub 支持它,但是如果我对 repo 进行更改,不清楚我如何不进行更改到每个分支的 Dockerfile。

【问题讨论】:

  • 如果它在 Github 中被标记,文件不会改变,因为你会链接到标记的文件,不是吗?例如,nginx.
  • 是的,你必须为每个版本更改文件,这看起来就像 nginx 所做的那样

标签: git github docker dockerhub


【解决方案1】:

您应该能够通过 Docker Hub 的自动构建并在 构建设置 中执行您所描述的操作,设置您的 Github 标签 Name 和 Docker 标记名称。您可以使用通配符和变量 {sourceref}`,“它指的是源分支/标签名称”。

每当你推送一个带有与 Github 标签匹配的 Docker 标签的新镜像时,它都会拉取匹配的 Dockerfile——之前的标签将保持不变。因此,有人可以通过使用标签作为您提到的参考来提取较旧的 Docker 映像和匹配的 Github 代码:

ENV APP_VER=2.1.0
RUN git clone ... app.git; git -C app checkout ${APP_VER}

在这种情况下,假设您已设置 Docker Hub 以匹配这些值,并且每个标签(Docker 映像和 Github)为 2.1.0

我不太确定您所说的“每个分支”是什么意思,这可能是混淆的一部分,尤其是如果您习惯于 SVN。在 git 中,标签与分支无关,而是与特定的提交(或〜时间点)相关联,因此当您检索该标签时,它总是会使用与提交时相同的代码版本制作。 (通常与发布被删除的时间相同。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多