老师的 Docker Hub 🐳
镜像自动从hub上缓存到自己的仓库,改过的镜像上传到缓存仓库。
目录结构
docker-mirror/
├── docker-compose.yml
├── README.md
├── config/
│ ├── registry-mirror.yml # mirror 服务配置(pull-through cache)
│ └── registry-push.yml # private 服务配置(可推送)
└── data/ # 数据持久化(自动生成,勿删)
├── mirror/ # mirror 缓存数据
└── private/ # 私有仓库数据端口一览
| 端口 | 服务 | 说明 |
|---|---|---|
| 5000 | mirror | Pull-through 缓存(拉镜像走这里) |
| 5001 | private | 私有仓库(推镜像走这里) |
| 8181 | ui-mirror | 浏览器查看 mirror 缓存的镜像 |
| 8182 | ui-private | 浏览器查看私有仓库的镜像 |
启动 / 停止
# 启动所有服务
docker compose up -d
# 查看运行状态
docker compose ps
# 停止所有服务
docker compose down
# 查看某个服务日志
docker compose logs -f mirror拉镜像(pull-through cache)
方式一:直接指定仓库地址
# 官方镜像(library 前缀)
docker pull localhost:5000/library/nginx:latest
docker pull localhost:5000/library/ubuntu:22.04
docker pull localhost:5000/library/redis:latest
# 第三方镜像
docker pull localhost:5000/snowdreamtech/frpc:latest第一次会去 Docker Hub 拉取并缓存,之后直接从本地返回。
方式二:配置 daemon.json(推荐)
编辑 /etc/docker/daemon.json(Mac 在 Docker Desktop → Settings → Docker Engine):
{
"registry-mirrors": ["http://localhost:5000"],
"insecure-registries": ["localhost:5001"]
}重启 Docker 后,直接用正常命令即可自动走 mirror:
docker pull nginx:latest推镜像(私有仓库)
# 打 tag 指向本地私有仓库
docker tag myapp:v1 localhost:5001/myapp:v1
# 推送
docker push localhost:5001/myapp:v1
# 拉取
docker pull localhost:5001/myapp:v1查看缓存了哪些镜像
# 命令行查询
curl http://localhost:5000/v2/_catalog
# 查某个镜像的 tag 列表
curl http://localhost:5000/v2/library/nginx/tags/list
# 确认镜像架构(amd64 / arm64)
docker inspect nginx:latest | grep Architecture或者直接打开 Web UI:
- mirror 缓存:http://localhost:8181
- 私有仓库:http://localhost:8182
缓存说明
- mirror 缓存不会自动更新,本地有缓存就直接返回
- 需要强制拉最新版,手动删除对应缓存目录再重新 pull
- pull-through cache 会根据客户端机器架构自动缓存对应层(amd64 / arm64 互不干扰)
# 清除某个镜像的缓存(以 nginx 为例)
docker compose stop mirror
rm -rf ./data/mirror/docker/registry/v2/repositories/library/nginx
docker compose start mirror开启密码认证(可选)
- 生成密码文件:
mkdir -p ./auth
docker run --rm --entrypoint htpasswd httpd:2 \
-Bbn teacher secret123 > ./auth/htpasswd- 在
config/registry-push.yml中取消注释auth段:
auth:
htpasswd:
realm: "Docker Registry"
path: /auth/htpasswd- 在
docker-compose.ymlprivate 服务里挂载:
volumes:
- ./auth:/auth:ro- 重启并登录:
docker compose restart private
docker login localhost:5001暴露到局域网
把 localhost 换成服务器 IP,其他机器的 daemon.json:
{
"registry-mirrors": ["http://192.168.1.100:5000"],
"insecure-registries": ["192.168.1.100:5000", "192.168.1.100:5001"]
}⚠️ HTTP 非加密,仅建议内网使用。生产环境建议加 Nginx + TLS。
最后一次更新于2026-05-25

