Docker 是一个非常流行的容器化平台,它让我们可以轻松地部署和管理应用。但是,随着使用时间的增长,你可能会好奇 Docker 到底在你的 Linux 系统上占用了多少空间。本文将详细介绍如何检查 Docker 镜像、容器以及 volumes 的磁盘空间使用情况,并附带相关代码及运行结果。
所有 Docker 组件的磁盘使用情况
首先,所有 Docker 镜像、容器和其他相关程序都位于 /var/lib/docker
。你可以检查此目录的大小来获取 Docker 使用的总磁盘空间:
sudo du -sh /var/lib/docker
运行结果示例:
2.5G /var/lib/docker
这表明 Docker 在我的系统上总共占用了 2.5GB 的空间。
检查 Docker 磁盘空间使用情况
要了解镜像、容器、本地 volumes 占用了多少空间,可以使用以下基本的 Docker 命令:
docker system df
运行结果示例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 3 1.2GB 500MB (40%)
Containers 3 3 100MB 0B (0%)
Local Volumes 2 2 20MB 0B (0%)
Build Cache 0 0 0B 0B
这个命令会列出按 Docker 组件分组的所有磁盘使用信息。
检查 Docker 镜像大小
要查看 Docker 镜像及其大小,可以使用以下命令:
docker images -s
运行结果示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest d1a364dc548d 2 weeks ago 133MB
ubuntu latest 2a4cca5ac898 3 weeks ago 73.9MB
这个命令列出了系统上的所有 Docker 镜像,并展示了一些详细信息,包括大小。
检查正在运行的容器大小
要知道正在运行的 Docker 容器的大小,可以使用 docker ps
命令,并查看 SIZE
列:
docker ps -s
运行结果示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
d9f9f426f9b1 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx-test 10MB (virtual 133MB)
这里的 SIZE
列显示的是容器的可写层大小,而括号中的是包括底层镜像在内的虚拟大小。
特定镜像磁盘使用情况
让我们安装一个 nginx 镜像,并查看其磁盘使用情况。
docker pull nginx
获取容器/镜像的元数据:
docker inspect nginx:latest
在输出中,你会注意到 GraphDriver
字段,它提供了镜像数据存储的详细信息。为了简化,我们可以直接查看镜像大小,前面已经通过 docker images -s
展示过。
特定容器磁盘使用情况
运行一个名为 nginx-test
的容器:
docker run -d --name nginx-test nginx
运行 docker ps
,可以看到它正在运行:
docker ps
现在,我们想知道这个容器具体占用了多少磁盘空间。docker inspect
命令可以提供帮助:
docker inspect nginx-test
在输出中,找到 GraphDriver
字段,这些位置是容器数据物理存储在主机系统上的位置。为了直接查看大小,可以在主机上使用 du
命令:
sudo du -sh /var/lib/docker/containers/<container_id>
你需要将 <container_id>
替换为实际的容器 ID。
特定 volumes 磁盘使用情况
Volumes 是 Docker 中用于持久化数据的机制。主要有两种类型:常规 Docker Volumes 和 bind mounts。
Docker Volumes
运行一个包含 volumes 的 nginx 容器:
docker run -d --name nginx-test -v test-data:/var/lib/app/content nginx
这会自动创建一个名为 test-data
的 volume。在容器内创建一个文件:
docker exec nginx-test sh -c "touch /var/lib/app/content/test.md"
进入容器查看文件:
docker exec -ti nginx-test sh
/ # ls /var/lib/app/content
test.md
/ # exit
使用 docker volume ls
列出所有 volumes:
docker volume ls
运行结果示例:
DRIVER VOLUME NAME
local test-data
查找特定 volume 的物理位置:
通常,volumes 存储在 /var/lib/docker/volumes
目录下。你可以使用 ls
和 du
命令查看特定 volume 的大小:
sudo ls -l /var/lib/docker/volumes/test-data/_data
sudo du -sh /var/lib/docker/volumes/test-data/_data
运行结果示例:
total 0
-rw-r--r-- 1 root root 0 Oct 6 23:20 test.md
0K /var/lib/docker/volumes/test-data/_data
Bind Mounts
Bind mounts 是将主机文件系统的某个目录直接挂载到容器中。使用以下命令运行一个容器,并将主机目录 /home/rumenz/test-data
挂载到容器内的 /var/lib/app/content
:
mkdir /home/rumenz/test-data
docker run -d --name nginx-test -v /home/rumenz/test-data:/var/lib/app/content nginx
使用 Linux 的 du
命令查看主机目录的大小:
sudo du -sh /home/rumenz/test-data
运行结果示例:
0K /home/rumenz/test-data
进入容器查看挂载目录的大小:
docker exec -ti nginx-test sh
/ # du -sh /var/lib/app/content
0K /var/lib/app/content
可以看到,两个目录的大小是相同的。
通过上述步骤,你可以详细了解 Docker 镜像、容器和 volumes 的磁盘使用情况。希望这些信息对你有所帮助!