docker tag 是什么
docker tag 给已有镜像再加一个名字,本质是在镜像 ID 上增加一个引用,不会复制任何数据,磁盘占用不会翻倍。最常见的用法是推送前把本地名改成仓库全名,以及给同一镜像同时打版本号与滚动标签。镜像名由仓库地址、命名空间、名称与标签四段组成,缺一段就会被推到默认仓库。
基本信息
| 语义 | 为镜像 ID 增加或替换引用名,存储不翻倍 |
|---|---|
| 名称结构 | 仓库地址/命名空间/镜像名:标签 |
| 典型用途一 | 本地名改为仓库全名,作为推送前置步骤 |
| 典型用途二 | 版本号与滚动标签并存,如 1.0.0 与 stable |
| 注意 | 同一标签重新指向别的镜像后,原镜像可能变为悬空 |
典型使用场景
- 推送准备:本地构建出的 app:latest 打上私有仓库地址再推送
- 版本管理:一次构建同时打 1.0.0、stable 两个标签,回滚有据可依
- 环境区分:同一镜像打 dev 与 prod 标签,分别部署到不同环境
- 灰度发布:给新版本打 canary 标签,便于单独调度
- 镜像迁移:从旧仓库拉取后重打标签推到新仓库,完成仓库搬迁
打标签与推送
打标签与推送
docker build -t myapp:1.0.0 .
docker tag myapp:1.0.0 registry.example.com/ns/myapp:1.0.0 # 改成仓库全名
docker tag myapp:1.0.0 myapp:stable # 同一镜像再加滚动标签
docker push registry.example.com/ns/myapp:1.0.0 # 推送前先 docker login
docker images myapp # 核对标签指向同一个镜像 ID标签命名建议
| 标签 | 用途 | 是否可变 |
|---|---|---|
| 1.0.0 | 正式发布版本 | 不可变,只指向唯一内容 |
| latest | 最近构建,易被覆盖 | 可变,不建议生产使用 |
| stable | 当前稳定版指针 | 可变,但需发布流程管控 |
| dev / test | 环境专用 | 可变,仅限对应环境 |
| git 短提交号 | 可追溯到源码 | 不可变,便于排查 |
稳定发布环境只认不可变标签(版本号或镜像摘要),滚动标签留给测试环境。用摘要部署还能彻底避免同名标签被覆盖带来的意外。
打标签不会复制镜像数据,所以同一镜像挂多个标签不会占用额外磁盘;真正占空间的是不同内容却共用一个标签的历史版本。