如何针对离线环境仅打包传输Podman容器的版本增量?
Podman 容器增量打包与传输方案
答案:完全可以实现
Podman 3.4.7 支持增量镜像打包功能,能够仅导出新旧容器镜像之间的差异层,完美解决你需要传输几KB模块却要发1.1GB完整镜像的问题。
具体操作步骤
1. 准备旧版本镜像基准
假设旧版本镜像的标签为 python_runner:old(如果之前没打标签,可以用镜像ID替代),先导出旧镜像作为基准:
podman save -o python_runner_old.tar python_runner:old
如果生产实例上已经部署过旧版本镜像,这一步可以跳过,无需重新传输旧镜像文件
2. 生成增量差异包
使用 podman save 的 --diff 参数对比新旧镜像,只导出变化的层:
podman save --diff python_runner:old -o python_runner_diff.tar python_runner:latest
这个 python_runner_diff.tar 就是仅包含新增Python模块的增量包,体积会极小。
3. 在生产实例加载增量包
将增量包传输到无网络的生产实例后,执行以下命令加载:
# 如果生产实例没有旧镜像,先加载旧镜像文件 podman load -i python_runner_old.tar # 加载增量包 podman load -i python_runner_diff.tar
加载完成后,生产实例就会拥有更新后的 python_runner:latest 镜像。
关键注意事项
- 必须确保生产实例上存在完整的旧版本镜像,否则增量包无法正常合并。
- 加载增量包后,建议验证新镜像功能:
podman run --rm python_runner:latest python -c "import 你的新增模块名"
- 可以对增量包进行gzip压缩进一步减小体积:
gzip python_runner_diff.tar
你的原始构建与打包命令
Dockerfile构建命令
echo "\ FROM jupyter/scipy-notebook USER root RUN apt-get update && apt-get install --no-install-recommends -y mupdf-tools python3-dev USER user RUN pip -V RUN pip install fitz==0.0.1.dev2 RUN pip install PyMuPDF==1.20.2 RUN pip install seaborn RUN pip install openpyxl==3.0.10 RUN pip install flask==2.1.3 " > sciPyDockerfile podman build --tag python_runner -f ./sciPyDockerfile
完整镜像打包命令
sudo podman save -o python_runner.tar python_runner gzip python_runner.tar
生成的完整镜像文件信息
1.1G Nov 28 15:27 python_runner.tar.gz
内容的提问来源于stack exchange,提问作者MikaData
相关产品推荐
相关产品推荐

