Em um projeto com várias referências a certas imagens do Docker, quero fornecer uma maneira versionável (ou seja, git-trackable) de usar nomes comuns para imagens do Docker.
Atualmente, em vários lugares em um projeto existente, alguns scripts Bash/Python, arquivos Docker ou arquivos Jenkins que estou referenciando, por exemplo, busybox:latest
. Agora quero usar nomes legíveis para imagens exclusivas sem redundância.
Pelo que entendi eu poderia usar meu próprio registro, fornecer uma tag legível e apenas usar a tag ou o repo-digest correto:
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
Mas agora eu também quero que os sha1s distintos por trás também sejam atualizados e rastreáveis pelo git (sem ter que escrever redundantemente o sha em todos os lugares). Talvez eu não esteja usando as palavras corretas, mas o que eu preciso pode ser alcançado usando um arquivo de texto contendo algum tipo de "aliases", por exemplo
docker_aliases.txt :
my_registry/busybox_default sha256:dafhs3ca712...3486b
my_registry/ubuntu-20.04 sha256:6a507907bd4e...a50
que poderia ser usado de alguma forma com todas as chamadas do Docker que envolvem a extração de imagens e me permitiriam
- use
my_registry/busybox_default
como especificador de imagem em todos os lugares - tem um lugar para atualizar esses aliases
- que pode ser rastreado pelo git (muito importante)
Parece que todo mundo que está mantendo algum CI maior deve se deparar com esse problema. Existe uma solução geral para isso?
Crie um Dockerfile com apenas uma
FROM
diretiva apontando para a imagem que você deseja usar. Acompanhe com git. Sempre construa para a mesma tag. Use essa tag em todos os lugares.Como alternativa, use um script de shell
docker tag
que seja necessário. Você pode até acioná-lo a partir de um git hook.