在一个对某些 Docker 镜像有多个引用的项目中,我想提供一种可版本控制(即可 git 跟踪)的方式来使用 Docker 镜像的通用名称。
目前,在现有项目的几个地方,我引用了一些 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
但现在我也希望后面的不同sha1s也是可更新和git 可跟踪(无需到处重复写入 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 的人都应该会遇到这个问题。有没有通用的解决方案?
答案1
创建一个 Dockerfile,只需一个FROM
指向您要使用的镜像的指令。使用 git 跟踪它。始终将其构建到相同的标签。在任何地方都使用该标签。
- 到处都使用相同的图像标签
- 在 Dockerfile 中进行更新
- git 跟踪更改
docker tag
或者,使用必要的shell 脚本。您甚至可以从 git hook 触发它。