在 Docker 推送镜像到 Harbor 仓库之前,需要给镜像打上 Harbor 仓库地址的 tag,这样做的原因是为了指定镜像的目标仓库地址和路径,确保镜像能够正确推送到指定的 Harbor 实例和项目中。
原因详解:
-
指定仓库位置:
- Docker 使用镜像 tag 来标识镜像的来源或目标地址。给镜像打上 Harbor 地址的 tag(例如
harbor.mycompany.com/project/image:tag
),Docker 才能知道将镜像推送到哪个仓库服务器上。
- Docker 使用镜像 tag 来标识镜像的来源或目标地址。给镜像打上 Harbor 地址的 tag(例如
-
区分不同的仓库和项目:
- Harbor 是一个多租户的镜像仓库,通常会包含多个项目。每个项目可以有不同的访问权限和管理策略。通过在 tag 中添加 Harbor 地址和项目名称,可以精确定位镜像的存储位置,避免推送到错误的项目或仓库。
-
满足 Docker CLI 的推送规则:
- Docker CLI 的
docker push
命令要求指定 registry 地址。如果镜像没有带上完整的仓库地址(即没有包含类似harbor.mycompany.com
的信息),Docker 默认会将镜像推送到 Docker Hub。打上 Harbor 的地址后,Docker CLI 知道这是一个自定义 registry,而不是 Docker Hub。
- Docker CLI 的
示例
假设需要将镜像 myapp:latest
推送到 harbor.mycompany.com
上的 projectA
项目中,可以按照以下步骤进行:
-
给镜像打上 Harbor 地址的 tag:
docker tag myapp:latest harbor.mycompany.com/projectA/myapp:latest
-
推送镜像到指定的 Harbor 仓库:
docker push harbor.mycompany.com/projectA/myapp:latest
小结
通过打上包含 Harbor 地址的 tag,Docker 能正确识别镜像的目标仓库地址,确保镜像推送到正确的仓库和项目中,这对镜像管理和仓库访问控制都至关重要。