在一个对某些 Docker-images 有多个引用的项目中,我想提供一种可版本化(即 git-trackable)的方式来使用 Docker-images 的通用名称。
目前在现有项目的几个地方,我引用了一些 Bash/Python 脚本、Docker 文件或 Jenkins 文件,例如busybox:latest
. 现在我想为唯一图像使用可读的名称,而不是冗余。
据我了解,我可以使用自己的注册表,提供可读标签,然后使用标签或正确的 repo-digest:
docker pull busybox:latest
docker tag busybox:latest my_registry/busybox:default
docker push my_registry/busybox:default
# use
docker pull busybox@sha256:dca712...86b <- has to be maintained manually
# or
docker pull my_registry/busybox:default <- not updateable or not unique for given commit
但是现在我也希望后面的不同 sha1 也可以更新和git-trackable(不必在任何地方冗余地编写 sha)。也许我没有使用正确的措辞,但我需要的可以通过使用包含某种“别名”的文本文件来实现,例如
docker_aliases.txt:
my_registry/busybox_default sha256:dafhs3ca712...3486b
my_registry/ubuntu-20.04 sha256:6a507907bd4e...a50
然后可以以某种方式与所有涉及拉取图像的 Docker 调用一起使用,并允许我
- 在所有地方用作
my_registry/busybox_default
图像说明符 - 有一个地方可以更新这些别名
- 可以被 git 跟踪(非常重要)
感觉每个维护较大 CI 的人都应该遇到这个问题。有没有通用的解决方案?
创建一个 Dockerfile,其中只有一个
FROM
指向您要使用的图像的指令。用 git 跟踪它。始终将其构建到相同的标签。到处使用那个标签。或者,使用
docker tag
必要的 shell 脚本。你甚至可以从 git hook 触发它。