技术问询:如何向Quay.io推送带版本标签的Docker容器
我来帮你把这个流程理清楚——给Docker容器打像1.0.0-SNAPSHOT、1.0-rc这类自定义版本标签,再推送到Quay.io其实和标准Docker镜像操作逻辑完全一致,Quay官方文档没专门提这点,是因为这属于通用Docker操作范畴,没必要单独赘述。下面一步步讲:
一、给镜像指定自定义版本标签
有两种常用方式,选哪种都可以:
构建镜像时直接打标签
用docker build命令的-t参数,直接把Quay仓库路径、镜像名和版本标签绑定在一起,格式是quay.io/你的用户名/镜像名:版本标签。比如:docker build -t quay.io/your-username/my-app:1.0.0-SNAPSHOT .这里的
1.0.0-SNAPSHOT就是你要的自定义版本号,只要符合Docker标签规则(小写字母、数字、点、连字符、下划线,不能以点或破折号开头,长度不超128字符),你说的1.0-rc、2.0、3.1.6-G.A这些都完全符合要求。给已有的镜像补打标签
如果已经构建好镜像(比如只有默认的latest标签),可以用docker tag命令给它加新的版本标签。先通过docker images找到你的镜像ID(比如是abc123),然后执行:docker tag abc123 quay.io/your-username/my-app:1.0-rc要是已经有带Quay仓库路径的镜像,也可以直接基于现有标签打新标签:
docker tag quay.io/your-username/my-app:latest quay.io/your-username/my-app:2.0
二、推送指定版本的镜像到Quay.io
首先得确保你已经登录Quay.io,用这条命令:
docker login quay.io
输入你的Quay用户名和密码(或者用Quay网页端生成的个人访问令牌,更安全)。
然后推送的时候,直接指定带版本标签的完整镜像名就行:
docker push quay.io/your-username/my-app:1.0.0-SNAPSHOT
这样Docker就会准确把这个版本标签对应的镜像推送到Quay的仓库里。如果你想一次性推多个版本(比如同时推latest和3.1.6-G.A),分别执行推送命令就行:
docker push quay.io/your-username/my-app:3.1.6-G.A docker push quay.io/your-username/my-app:latest
三、Docker怎么识别要推送的对应版本?
Docker的标签本质是镜像ID的“别名”——每个标签都和唯一的镜像ID绑定。当你执行docker push时,Docker会先检查你指定的<仓库路径>/<镜像名>:<标签>在本地是否存在(用docker images能查到),然后找到对应的镜像ID,把该镜像的内容推送到Quay的对应仓库,同时在Quay上注册这个标签。简单说,你指定哪个标签,Docker就推哪个标签对应的镜像版本,不会搞混。
最后提个小细节:如果还没在Quay网页端创建对应仓库,第一次推送时Quay会自动帮你创建一个公开仓库;如果需要私有仓库,建议提前在Quay网页端手动创建好。
内容的提问来源于stack exchange,提问作者smeeb

