amo*_*ron 4 docker dockerfile docker-image
我知道每个容器都是一个镜像,在一堆只读层之上有一个可读/可写层,并且多个容器可以共享镜像的只读层。从同一基础镜像创建的两个镜像是否共享相同的镜像?
例子:
现在总磁盘空间是 3.6GB 还是 1.6GB?
简短回答:1.6GB
这是一个有趣的实验,您可以执行:
拉取虚拟图像:
docker pull alpine
Run Code Online (Sandbox Code Playgroud)
为子镜像 准备一个Dockerfile alpine(这里我使用在镜像中创建了一个10MB的文件dd)
FROM alpine
RUN dd if=/dev/zero of=file.txt count=10000 bs=1024
Run Code Online (Sandbox Code Playgroud)
构建儿童形象
docker build -t alpine-plus-ten-mb .
Run Code Online (Sandbox Code Playgroud)
然后检查这两个图像并查看图层。
docker image inspect --format='{{json .GraphDriver.Data}}' alpine
{
"MergedDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/merged",
"UpperDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/diff",
"WorkDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/work"
}
docker image inspect --format='{{json .GraphDriver.Data}}' alpine-plus-ten-mb
{
"LowerDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/diff",
"MergedDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/merged",
"UpperDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff",
"WorkDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/work"
}
Run Code Online (Sandbox Code Playgroud)
请注意,UpperDir基础高山图像 ( ...d93b/diff) 的 似乎是LowerDir针对派生图像的alpine-plus-ten-mb。
一个重要的方面:该层...d93b/diff对于子图像是只读的alpine-plus-ten-mb。换句话说,该层保证是不可变的,这允许其他派生图像重用它并在其之上构建自己的增量,而无需复制(创建副本)它。
这些也可以在主机系统上进行探索。这是我在构建子映像时人为添加的约 10MB增量。dd
sudo du -sh "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff"
9.8M /var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |