docker - `docker load` 时如何保持图层(没有壁球)
问题描述
目前我们正在使用docker 19.03.15
;
- 我们
docker build -t test:test .
用来获取图像test:test
(docker image history test:test
A) - 我们
docker save -o out.tar test:test
用来得到out.tar
- 我们
docker rmi test:test
用来删除原始图像 - 我们
docker load -i out.tar
用来test:test
回来 (docker image history test:test
B)
对于 的 A 和 B 的探测docker image history
,我们发现在 B 处只有一个图像层,而其他图像层是<missing>
;签入docker run
,所有内容都在那里,这意味着docker将所有层合二为一!
我的问题是:如何告诉 docker 从 tar 球加载图像并保留图层?
对于层,我的意思是,在 Dockerfile 中有命令的地方,就有一层,例如
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y vim # create one layer
RUN apt-get install -y python3 # create another layer
之后docker build
,使用docker image history
可以看到
IMAGE | CREATED BY
hash1 | |0 /bin/sh -c apt-get install -y python3
hash2 | |0 /bin/sh -c apt-get update && apt-get install -y vim
hash3 | ... (base image last command)
<missing> | ...
之后docker load
,docker image history
将显示
IMAGE | CREATED BY
hashx | |0 /bin/sh -c apt-get install -y python3
<missing> | |0 /bin/sh -c apt-get update && apt-get install -y vim
<missing> | ... (base image last command)
<missing> | ...
解决方案
黑客方式:我们可以直接操作/var/lib/docker
来转储图像数据并删除我们想要的图层。
推荐阅读
- python - argparse:打开多个文件,如果一个文件不存在则忽略错误?
- android - 旧应用程序版本在 Play 商店中发布,而新的更新正在审查中
- pandas - 如何使此数据框更新更有效?
- reactjs - 在我的情况下,我应该如何使用 OAuth 2.0 授权授权(React 前端,Spring Boot 后端)
- apache-spark - Dataproc 笔记本无法导入或导出到 BigQuery:找不到类异常
- python - 由于没有互联网连接而未执行 django 查询时如何捕获异常
- swift - 如何在 SwiftUI WatchOS App 中更改列表的行背景颜色
- fabricjs - fabricjs 对象的所有可能类型是什么?
- angular - 将初始状态对象初始化为空对象而不是 undefined
- iis - 出站重写规则中的重写提供程序错误