管理docker hub映像版本的正确方法

管理docker hub映像版本的正确方法,docker,Docker,理想情况: 我为现有docker hub repo创建一个新标记: docker构建-组织/回购:v1 我有一个docker compose,上面写着标签: version: '2' services: api: image: org/repo ... 但是,这不起作用,因为没有最新的标签 有没有办法让这种行为发生?否则,每个部署都必须修改docker compose.yml,这看起来很愚蠢 我有一个难看但有效的解决方案: 我只需重新标记并推送最新的标签 docker ta

理想情况:

我为现有docker hub repo创建一个新标记:

docker构建-组织/回购:v1

我有一个docker compose,上面写着标签:

version: '2'
services:
  api:
    image: org/repo
    ...
但是,这不起作用,因为没有最新的标签

有没有办法让这种行为发生?否则,每个部署都必须修改
docker compose.yml
,这看起来很愚蠢

我有一个难看但有效的解决方案: 我只需重新标记并推送最新的标签

docker tag org/repo:v1 org/repo:latest
docker push org/repo:latest
有更好的想法吗?

请参阅“发件人:
最新的”
是一个引用推送的标记的标记:

“最新”只是一个带有特殊名称的标签。 除非您使用非常特定的构建/标记/推/拉/运行模式,否则它并不意味着什么特别的东西

“最新”只是指“运行时未指定特定标记/版本的上次生成/标记”

换句话说,您可以构建如下新版本:

sudo docker build -t marc/test .
sudo docker tag marc/test marc/test:2 
...
sudo docker build -t marc/test .
sudo docker tag marc/test:3
...
但这有点奇怪。为什么我要给所有东西贴两次标签

如果要将Docker映像传送到生产环境,则应忽略
最新的
标记。
不要用它。不要被它诱惑。
很容易看到它,并认为您的部署脚本应该只拉“最新的”,您的构建过程将确保它是有效的。要做到这一点需要很多纪律。只需修改你的标签。每一次

请参阅中带有“”的更多信息:

如果要将存储库上载到Docker Hub,则存储库名称必须以斜杠和Docker Hub用户名作为前缀,例如
amouat/myrepo:mytag

诀窍当然是,如果您不使用标记部分(例如,
docker标记myrepo:1.0 myrepo
),docker将自动为其提供标记
latest

见“”

仅仅因为图像被标记为最新,并不意味着它是其存储库中最新的图像

那么,如果在没有最新标记的存储库上执行拉取操作,会发生什么情况呢?
这:


OP补充道:

我遇到的问题是,试图使开发环境与最新的更改保持同步,而不必手动编辑docker-compose.yml,每次更改都使用新标记

为此,我始终维护一个“已部署”标记,该标记正在移动(仅在升级图像标记时应用),并在scripts/docker-compose.yml中使用


我更喜欢构建自己的图像,以便用来记忆“已部署”标记实际指的内容(我设置了一个名为“标记”的标签,标签中包含实际的标记名称)。

谢谢!我认为接下来的方法是避免在
docker compose.yml
的开发中使用repo,而是在生产部署中引用远程存储库。我遇到的问题是试图使开发环境与最新的更改保持同步,而不必手动编辑带有新标记的
docker compose.yml
。@user3162553我已编辑了我的答案以解决您的评论。
$ docker pull amouat/myrepo
Pulling repository amouat/myrepo
2015/01/21 12:04:06 Tag latest not found in repository amouat/myrepo