有人可以解释或链接一篇解释 Docker“大小”的文章吗?
例如 - 我提取了一些基于 Windows 的容器:
docker system df --verbose
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
mcr.microsoft.com/windows/servercore 1909-amd64 8116ea20e860 3 weeks ago 5.509GB 5.509GB 0B 0
mcr.microsoft.com/dotnet/framework/aspnet 4.8-windowsservercore-1909 eff771fe260f 3 weeks ago 7.523GB 7.523GB 0B 0
mcr.microsoft.com/windows/servercore ltsc2019 31902e4b25a6 4 weeks ago 5.212GB 0B 5.212GB 0
mcr.microsoft.com/powershell lts-windowsservercore-2004 7c3eedbd9958 6 weeks ago 4.84GB 0B 4.84GB 0
mcr.microsoft.com/dotnet/framework/sdk 4.8 27c31113cb5e 3 months ago 8.667GB 0B 8.667GB 0
microsoft/mssql-server-windows-developer 2017-GA 454b8faa6c43 3 years ago 11.55GB 0B 11.55GB 0
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
db7868c7480c mcr.microsoft.com/powershell "cmd" 0 0B 4 seconds ago Exited (0) 1 second ago happy_agnesi
Local Volumes space usage:
VOLUME NAME LINKS SIZE
721e8ed501b31c35f3d847b09189ce21a1c33c32b0daff48fa2a17e57c92afda 0 0B
73f678eec23d645575b96df63d48c9b3c7b3c379bd11f01d12d6fc0a7180fa2d 0 0B
e1e165e9776dda6afb73ba8af79e337f6ef19268935fdf485aead0942bb5934d 0 0B
3210cffd7ef3a592487b69695338448cb9aa31917c2dc2c25e628e866a71ba6a 0 0B
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
我从上面的 Docker 镜像 mcr.microsoft.com/windows/servercore
数据中了解到:
5.509GB
吗?docker run -d .....
这个尺寸会堆积起来吗?因此,上面图像的 2 个正在运行的容器将在我的物理硬盘上占用 5.509 Gb + 5.509 Gb = 11.018 Gb
左右?mcr.microsoft.com/dotnet/framework/aspnet
的大部分层都基于 mcr.microsoft.com/windows/servercore
镜像的层 - 那么它对 docker push
命令(到私有仓库)有任何影响吗?对 docker pull
命令有任何影响吗?running
状态的问题) - 是否有任何地方/命令可以看到这个大小?我可以在 Windows 图像上限制这个大小吗?memory
的一点解释:它不在容器之间共享(?)所以假设运行 100 个内存饥饿的容器将有效地吃掉我计算机上的所有物理内存,然后呢?运行新容器会被拒绝吗?一切都会冻结?有什么工具可以防止这种情况发生?答案 0 :(得分:1)
# You already have an Image that consists of these layers
3333
2222
1111
# You pull an image that consists of these layers:
AAAAA <-- You only need to pull (and need additional space) for this layer
22222
11111
如果您删除第一个图像,则只会删除图层 3333,但其他 2 个图层仍被其他图像使用且无法删除。
/opt/helloworld.txt
,该容器不需要 debian 映像的空间,因为所有层都是共享空间。您只需要文件 /opt/helloworld.txt
mcr.microsoft.com/windows/servercore
,则您只需要为您自己的附加层提供空间。/var/lib/docker/containers/<container>/<container>-json.log
(您的 docker 路径可能会有所不同)。是的,它占用了硬盘驱动器上的空间。您正在运行的容器在 /var/lib/docker/containers/overlay2/
中有一个条目,与您的图像相比,容器文件系统上的所有更改(例如,如果您编写的日志在它位于那里之前并不存在)。如果目录只包含日志文件,您可以为该目录创建一个卷并从主机使用 logrotate。否则你会被它困住,它会占用空间。