离线镜像包准备

本文介绍如何使用 skopeo 直接把镜像下载成 .tar 文件,适用于服务器无法直接访问镜像仓库的场景。

skopeo 是一个独立的软件工具,不包含在 Docker 里。如本机尚未安装,请先安装 skopeo,再执行本文中的下载命令。

例如:

# macOS(Homebrew)
brew install skopeo

# CentOS / RHEL
sudo yum install -y skopeo

# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y skopeo

本文只覆盖三个运行所需镜像:

  • yiask/dataagent
  • pgvector/pgvector
  • redis

1. 先确认目标服务器架构

在目标服务器上执行:

uname -m

常见结果对应关系如下:

服务器输出下载时使用的架构
x86_64amd64
aarch64arm64
arm64arm64

后续命令里会用到这个架构值。

2. 同架构时,直接下载三个 tar 包

如果你自己的电脑和目标服务器架构一致,可以直接执行下面三条命令。

下面示例使用当前文档中的常见版本:

  • YiAsk:2.2.9
  • PostgreSQL:pg17-trixie
  • Redis:8.4
skopeo copy \
  docker://yiask/dataagent:2.2.9 \
  docker-archive:yiask-dataagent-2.2.9.tar:yiask/dataagent:2.2.9

skopeo copy \
  docker://pgvector/pgvector:pg17-trixie \
  docker-archive:pgvector-pg17-trixie.tar:pgvector/pgvector:pg17-trixie

skopeo copy \
  docker://redis:8.4 \
  docker-archive:redis-8.4.tar:redis:8.4

执行完成后,会得到三个文件:

  • yiask-dataagent-2.2.9.tar
  • pgvector-pg17-trixie.tar
  • redis-8.4.tar

3. 不同架构时,加上目标架构参数

如果你自己的电脑和目标服务器架构不一致,就在 skopeo 命令前加上目标平台参数。

例如,目标服务器是 x86_64,则使用:

skopeo --override-os linux --override-arch amd64 copy \
  docker://yiask/dataagent:2.2.9 \
  docker-archive:yiask-dataagent-2.2.9.tar:yiask/dataagent:2.2.9

skopeo --override-os linux --override-arch amd64 copy \
  docker://pgvector/pgvector:pg17-trixie \
  docker-archive:pgvector-pg17-trixie.tar:pgvector/pgvector:pg17-trixie

skopeo --override-os linux --override-arch amd64 copy \
  docker://redis:8.4 \
  docker-archive:redis-8.4.tar:redis:8.4

如果目标服务器是 arm64,把命令中的 amd64 改成 arm64 即可。

4. 如果使用国内镜像地址

如果你们平时使用国内镜像地址,可以把上面的镜像名替换成完整地址。例如:

skopeo copy \
  docker://docker.1ms.run/yiask/dataagent:2.2.9 \
  docker-archive:yiask-dataagent-2.2.9.tar:docker.1ms.run/yiask/dataagent:2.2.9

pgvector/pgvectorredis 也同理替换即可。

5. 传到服务器后导入

把这三个 .tar 文件传到目标服务器后,执行:

docker load -i yiask-dataagent-2.2.9.tar
docker load -i pgvector-pg17-trixie.tar
docker load -i redis-8.4.tar

导入后可用以下命令检查:

docker image ls | grep -E 'yiask/dataagent|pgvector/pgvector|redis'

6. Windows 机器的替代方式

如果你在 Windows 上不方便安装或使用 skopeo,也可以直接使用 Docker Desktop 自带的 docker pulldocker save

注意

这种方式只建议在自己电脑和目标服务器架构相同的情况下使用。

例如:

  • Windows 电脑是 x86_64,目标 Linux 服务器也是 x86_64
  • Windows 电脑是 arm64,目标 Linux 服务器也是 arm64

如果架构不同,仍然建议使用前面的 skopeo 方式显式指定目标架构。

示例命令如下:

docker pull yiask/dataagent:2.2.9
docker save -o yiask-dataagent-2.2.9.tar yiask/dataagent:2.2.9

docker pull pgvector/pgvector:pg17-trixie
docker save -o pgvector-pg17-trixie.tar pgvector/pgvector:pg17-trixie

docker pull redis:8.4
docker save -o redis-8.4.tar redis:8.4

导出后的 .tar 文件同样可以传到目标服务器,再执行:

docker load -i yiask-dataagent-2.2.9.tar
docker load -i pgvector-pg17-trixie.tar
docker load -i redis-8.4.tar

7. 常见问题

7.1 为什么还要区分同架构和不同架构?

因为很多镜像是多架构镜像。自己电脑和服务器架构不一致时,如果不显式指定目标架构,下载出来的 tar 可能不是目标服务器能直接使用的版本。

7.2 能不能只下载 YiAsk,不下载 PostgreSQL 和 Redis?

可以。如果目标服务器上的 PostgreSQL 和 Redis 由客户现成环境提供,只下载 yiask/dataagent 即可。

7.3 skopeodocker pull && docker save 有什么区别?

这里更推荐 skopeo,因为它可以直接从镜像仓库复制到 docker-archive tar 文件,不需要先把镜像拉到本地 Docker daemon 再导出。