镜像仓库
Docker Hub、tag 规范、GHCR/ACR 概览。
镜像仓库
这一课你将能做到
- 把自己构建的 Spring Boot 镜像打 tag 并推送到 Docker Hub / 阿里云 ACR,另一台机器一拉即用
- 用
registry:2在本地或内网搭一个私有镜像仓库并完成 push/pull - 建立正确的镜像版本管理习惯:命名空间、tag 规范、为什么禁止只用 latest
为什么要学
镜像构建在你自己的电脑上,但部署发生在服务器上——中间必须有一座桥。这座桥就是镜像仓库(Registry):CI 构建完推上去,任何环境拉下来就能跑,交付从「传 jar 包 + 部署文档」变成「pull 一个 tag」。
团队协作同样离不开它:你写的镜像同事要用、测试环境要拉、生产环境要回滚到上个版本——全部依赖仓库里的版本管理。国内企业普遍用阿里云 ACR 或自建 Harbor(Harbor 底层同样是 registry 的增强版),个人学习用 Docker Hub 足够。
先建立图像
镜像全名的完整结构,很多人第一次见:
[registry地址/][命名空间/]仓库名:标签
────────────────────────────────────
docker.io/library/mysql:8.0 ← docker pull mysql:8.0 的完整名字
registry.cn-hangzhou.aliyuncs.com/myteam/demo-app:1.0
localhost:5000/demo-app:1.0 ← 本地私有仓库
ghcr.io/myteam/demo-app:1.0 ← GitHub Container Registry
推拉的完整流程:
你的电脑 服务器
docker build ─→ docker tag ─→ docker push docker pull ─→ docker run
│ ▲
▼ │
Registry(存镜像、管版本)──────┘
没有 push,镜像只存在于你的机器上;没有 tag 规范,仓库很快变成垃圾场。
跟着做
步骤 1:注册并登录 Docker Hub
- 到
https://hub.docker.com注册账号(记下用户名,下面用<你的用户名>表示)。 - 本地登录:
docker login
# 输入用户名密码(或用 Access Token 更安全),看到 "Login Succeeded"
步骤 2:给镜像打规范的 tag
tag 必须带上你的命名空间,否则默认属于 library(官方保留):
docker tag demo-app:1.0 <你的用户名>/demo-app:1.0
docker images | findstr demo-app # 两个名字,同一个 IMAGE ID
步骤 3:推送到 Docker Hub
docker push <你的用户名>/demo-app:1.0
输出会逐层显示 Pushed / Layer already exists(复用过的层不重传,第 4 课分层的直接收益)。
步骤 4:在另一台机器验证拉取
删掉本地镜像再拉回来,模拟服务器行为:
docker rmi <你的用户名>/demo-app:1.0
docker pull <你的用户名>/demo-app:1.0
docker run -d --name demo-remote -p 8082:8080 <你的用户名>/demo-app:1.0
curl http://localhost:8082/actuator/health
到这里,「任何机器一拉即用」已经成立。