docker tag
命令是 Docker 中一个非常基础且重要的命令,主要用于为镜像(image)创建一个别名(tag)。这个别名可以包含仓库地址、项目名称和版本信息,是镜像管理和分发的关键步骤。
1. 命令作用
docker tag
的核心作用是为一个已存在的 Docker 镜像创建一个新的标签(tag)。这并不会创建新的镜像,而是为同一个镜像添加一个额外的引用名称。
这在以下场景中非常有用:
- 准备将本地镜像推送到远程仓库(如 Docker Hub、阿里云容器镜像服务等)。
- 为镜像的不同版本打上清晰的标签(如
v1.0
,latest
)。 - 组织和管理本地镜像。
2. 基本语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
SOURCE_IMAGE
: 源镜像名称(或ID)。TAG
: 可选的标签,默认为latest
。TARGET_IMAGE
: 目标镜像名称,通常包含:
- 仓库地址(Registry): 如
docker.io
(Docker Hub)、registry.cn-hangzhou.aliyuncs.com
(阿里云)。 - 命名空间/项目名(Namespace/Repository): 如
library
,myproject
。 - 镜像名: 如
ubuntu
,nginx
。
TARGET_TAG
: 可选的目标标签,如v1.0
,stable
,latest
。
3. 镜像命名规范(TARGET_IMAGE)
完整的镜像标签格式为:
[registry[:port]/][namespace/]repository[:tag]
组成部分 | 说明 | 示例 |
| 镜像仓库地址,省略时默认为 |
|
| 命名空间,个人用户通常是用户名,组织用户是组织名 |
|
| 镜像仓库名 |
|
| 版本标签,默认为 |
|
4. 使用示例
✅ 示例1:为本地镜像打标签以便推送到 Docker Hub
# 假设你有一个本地镜像 myapp:dev
docker tag myapp:dev myusername/myapp:1.0
之后你可以使用 docker push
推送到 Docker Hub:
docker push myusername/myapp:1.0
✅ 示例2:推送到私有仓库(如阿里云)
docker tag myapp:dev registry.cn-hangzhou.aliyuncs.com/myproject/myapp:v1.0
推送:
docker push registry.cn-hangzhou.aliyuncs.com/myproject/myapp:v1.0
✅ 示例3:为同一个镜像添加多个标签
docker tag myapp:1.0 myapp:latest
docker tag myapp:1.0 myapp:stable
此时 myapp:1.0
、myapp:latest
、myapp:stable
指向同一个镜像。
✅ 示例4:使用镜像 ID 打标签
docker tag abc123456789 registry.cn-hangzhou.aliyuncs.com/myproject/webapp:prod
5. 查看镜像
使用 docker images
查看打标签后的结果:
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp latest abc123456789 2 hours ago 120MB
myusername/myapp 1.0 abc123456789 2 hours ago 120MB
registry.cn-hangzhou.aliyuncs.com/myproject/myapp v1.0 abc123456789 2 hours ago 120MB
可以看到,虽然名称不同,但 IMAGE ID
相同,说明是同一个镜像。
6. 注意事项
- 标签是引用,不是复制:
docker tag
不会复制镜像数据,只是增加一个指向该镜像的标签。 - 删除标签不影响镜像:使用
docker rmi tag_name
删除标签,只要还有其他标签或容器在使用该镜像,镜像本身不会被删除。 - 推荐使用有意义的标签:避免过度依赖
latest
,建议使用语义化版本(如v1.2.0
)。 - 推送前必须打标签:
docker push
要求镜像名称中包含仓库地址和命名空间(如果是推送到非 Docker Hub 的 registry)。
总结
docker tag
是 Docker 镜像管理的基石命令,用于重命名或准备镜像以供推送。掌握其命名规范和使用方法,是进行镜像发布、CI/CD 流程和团队协作的必备技能。