离线镜像包准备
本文介绍如何使用 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. 先确认目标服务器架构
在目标服务器上执行:
常见结果对应关系如下:
后续命令里会用到这个架构值。
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/pgvector 和 redis 也同理替换即可。
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 pull 和 docker 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 skopeo 和 docker pull && docker save 有什么区别?
这里更推荐 skopeo,因为它可以直接从镜像仓库复制到 docker-archive tar 文件,不需要先把镜像拉到本地 Docker daemon 再导出。