总结了在使用 Easysearch 时候下载Docker的一些技巧,一起分享给大家。

一、关于latest 标签

这是最重要的一条原则,所以 Easysearch 厂家就没有发行latest镜像。

1
2
3
4
5
# 不推荐 — latest 是浮动指针,今天和明天拉到的可能不是同一个镜像,所以厂家就没有做latest版本
docker pull infinilabs/easysearch:latest

# 推荐 — 锁定具体版本
docker pull infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

为什么不用 latest

  • latest 只是一个普通 tag,镜像仓库可以随时将它重新指向新版本
  • 有些镜像站更新不及时,pull可能拉到旧的版本
  • 无法从 tag 本身判断镜像的实际内容
  • 回滚时无法确定 latest 指向哪个历史版本

查看可用版本:

1
2
3
4
5
6
# 通过 Docker Hub 网页查看
# https://hub.docker.com/r/infinilabs/easysearch/tags

# 通过 CLI 查询(需要安装 jq)
curl -s "https://hub.docker.com/v2/repositories/infinilabs/easysearch/tags/?page_size=20" \
| jq '.results[].name'

二、使用镜像加速源

Docker Hub 在国内访问速度不稳定,配置加速源是提升下载速度的首要手段。

2.1 配置 Docker 镜像加速

由于镜像源并不稳定,这里只列出办法,不做推荐,如果有代理的话,也是加载到Docker 引擎,否则不能帮我我们下载到 Easysearch。

编辑 /etc/docker/daemon.json

1
2
3
4
5
6
{
"registry-mirrors": [
"https://docker.yyy.yyy",
"https://docker.xxx.xxx"
]
}

重启 Docker 生效:

1
2
3
4
5
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置是否生效
docker info | grep -A5 "Registry Mirrors"

部分仓库提供对 Docker Hub 的透明代理,直接替换镜像前缀即可:

1
2
3
4
5
6
7
8
# 原始地址
docker pull infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

# 使用代理仓库(以 dockerpull.org 为例,不是推荐使用这个源)
docker pull dockerpull.org/infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

# 拉取后重新打 tag,统一内部命名
docker tag dockerpull.org/infinilabs/easysearch:2.2.0-20260422-SNAPSHOT infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

三、SHA256 摘要校验

使用版本 tag 固定了名称,但无法防止仓库端镜像被替换(tag 可以被覆盖写入)。使用 digest(SHA256 摘要)才能真正做到内容寻址,确保拉取的镜像字节级一致。

3.1 查询镜像 Digest

1
2
3
4
5
6
7
8
9
10
11
# 方法一:通过 docker pull 输出获取
docker pull infinilabs/easysearch:2.2.0-20260422-SNAPSHOT
# 输出中会包含:
# Digest: sha256:abc123...

# 方法二:inspect 已拉取的镜像
docker inspect infinilabs/easysearch:2.2.0-20260422-SNAPSHOT \
--format='{{index .RepoDigests 0}}'

# 方法三:远程查询,不拉取镜像(需要安装 crane)
crane digest infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

3.2 通过 Digest 拉取镜像

1
2
3
4
# 格式:image@sha256:<digest>
docker pull infinilabs/easysearch@sha256:a1b2c3d4e5f6...

# 在 docker-compose.yml 中锁定 digest(推荐生产环境使用)
1
2
3
4
# docker-compose.yml
services:
easysearch:
image: infinilabs/easysearch:1.8.2@sha256:a1b2c3d4e5f6...

3.3 校验本地镜像完整性

1
2
3
4
5
6
# 获取镜像的完整 digest
docker images --digests infinilabs/easysearch

# 输出示例:
# REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
# infinilabs/easysearch 1.8.2 sha256:a1b2c3... d4e5f6a7b8c9 2 weeks ago 512MB

四、Tag 管理技巧

4.1 打 Tag 的标准做法

拉取镜像后,立即为其打上符合内部规范的标签,再推送到私有仓库:

1
2
3
4
5
6
7
8
9
# 1. 从外部仓库拉取
docker pull infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

# 2. 打内部标签(包含版本 + 环境信息)
docker tag infinilabs/easysearch:2.2.0-20260422-SNAPSHOT your-registry.internal/infra/easysearch:2.2.0-20260422-SNAPSHOT
docker tag infinilabs/easysearch:2.2.0-20260422-SNAPSHOT your-registry.internal/infra/easysearch:1.8.2-prod

# 3. 推送到私有仓库
docker push your-registry.internal/infra/easysearch:2.2.0-20260422-SNAPSHOT

4.2 Tag 命名规范建议

1
2
3
4
5
6
<registry>/<namespace>/<image>:<semver>[-<variant>]

示例:
your-registry.internal/infra/easysearch:2.2.0 # 标准版本
your-registry.internal/infra/easysearch:2.2.0-arm64 # 架构变体
your-registry.internal/infra/easysearch:2.2.0-20260422-SNAPSHOT # 版本+日期(内部构建)

4.3 清理冗余 Tag

1
2
3
4
5
6
7
8
9
# 查看本地所有 easysearch 相关镜像
docker images | grep easysearch

# 删除旧版本(保留最近 2 个版本)
docker rmi infinilabs/easysearch:1.7.0
docker rmi infinilabs/easysearch:1.7.1

# 批量清理 dangling 镜像(无 tag 的悬空镜像)
docker image prune -f

五、多架构镜像处理

Easysearch 提供 amd64arm64 多架构镜像,使用 docker buildx 处理跨架构场景:

1
2
3
4
5
6
7
8
9
10
11
# 查看镜像支持的架构
docker buildx imagetools inspect infinilabs/easysearch:2.2.0-20260422-SNAPSHOT

# 显式指定拉取 arm64 架构(在 x86 机器上准备 arm 部署包时使用)
docker pull --platform linux/arm64 infinilabs/easysearch:2.2.0-20260422-SNAPSHOT




# 打包指定架构的镜像为 tar
docker save infinilabs/easysearch:2.2.0-20260422-SNAPSHOT -o easysearch-2.2.0-20260422-SNAPSHOT-arm64.tar

六、离线环境部署

网络受限环境下,使用 save/load 传输镜像:

1
2
3
4
5
6
7
8
9
10
11
12
# 在有网络的机器上导出
docker pull infinilabs/easysearch:1.8.2
docker save infinilabs/easysearch:1.8.2 | gzip > easysearch.tar.gz

# 校验导出文件完整性
sha256sum easysearch.tar.gz > easysearch.tar.gz.sha256

# 传输到目标机器后,先校验
sha256sum -c easysearch.tar.gz.sha256

# 导入镜像
docker load < easysearch.tar.gz

在这里插入图片描述

七、最佳实践总结

场景 推荐做法
版本固定 使用语义化版本 tag,禁用 latest
内容校验 生产环境用 @sha256: digest 引用
下载加速 配置镜像加速源或者使用代理
内部管理 拉取后 retag 推入私有仓库,统一来源
离线部署 docker save + sha256sum 双重保障
多架构 明确指定 --platform,不依赖自动检测
存储清理 定期 docker image prune,删除无用旧版本

遵循以上原则,可以有效避免”拉到了什么版本不知道”、”镜像被篡改没发现”、”国内下载龟速”等常见问题,让 Easysearch 的部署更加稳定、可审计、可复现。