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