提升 Docker Desktop For macOS 磁盘使用率
本篇文章分享一些软件使用上的细节,以及如何提升磁盘利用率。
使用工具镜像和官方命令回收空间
如果你和我一样,使用 macOS 设备依赖容器做开发调试,那么随着时间的推移,会发现 “Docker 应用” 相关进程占用资源越来越多,即使在关闭所有容器应用后,使用 docker system prune 清理也不见效果。
早在几年前,就有人在官方反馈了关于硬盘空间未被正确释放的问题:Docker.qcow2 never shrinks - disk space usage leak in docker for mac #371
一般情况下,解决这个问题的方案只需要两步,先执行下面的命令,触发 Docker 文件系统回收:
docker run --privileged --pid=host docker/desktop-reclaim-space
然后再接着执行 docker system prune,稍等片刻即能看到磁盘用量有了明显的减少了。
最后使用 ls 查看文件尺寸,就能够看到尺寸占用被有效的减少啦:
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
29654336 -rw-r--r-- 1 soulteary staff 60G 4 24 16:30 /Users/soulteary/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
上面的日志说明我们设置的文件最大尺寸为 60GB,目前已经使用了接近 29GB。
重置应用强制回收空间
如果上面的操作在某些场景下没有生效,我们还可以继续使用应用重置的方式来“解决问题”。
在重置之前,我们还可以对之前使用的数据进行保存,以减少后续使用镜像时,拉取镜像的时间消耗。
当然,这里也可以对镜像打上 Tag,推送到私有仓库中,关于私有仓库的搭建,我之前有提过,感兴趣可以自行翻阅。
批量保存和导入容器镜像
原本想使用网上现成的命令,但是看了下都写的又啰嗦又长,于是忍不住写了“一句话”:
docker images | sed '1d' | grep -v '<none>' | awk '{print "docker save " ":" " -o " ".tar"}' | bash
执行脚本后,机器上所有带有明确名称和版本的镜像,都会被以镜像短哈希为名称保存在目录
而导入镜像就更简单了,使用 ls 和 xargs 写一句话命令就完事:
ls *.tar | xargs -I {} docker load -i {
}
其他
如果经过清理,磁盘占用还是很大,不妨使用 docker system df -v 来看看到底是哪些镜像、应用、网络、数据卷、缓存占用了磁盘:
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
soulteary/prebuilt-nginx-modules waf-1.20.0 24c736456f8e 3 hours ago 208.1kB 0B 208.1kB 0
soulteary/prebuilt-nginx-modules srcache-1.20.0 067753cb2b67 3 hours ago 302.3kB 0B 302.3kB 0
soulteary/prebuilt-nginx-modules redis2-1.20.0 9c05e05b2a99 3 hours ago 185.2kB 0B 185.2kB 0
soulteary/prebuilt-nginx-modules memc-1.20.0 fe364267465a 3 hours ago 263kB 0B 263kB 0
soulteary/prebuilt-nginx-modules http-redis-1.20.0 fd0730f838f3 3 hours ago 88.14kB 0B 88.14kB 0
...Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
7b6d5a4258c0 traefik:v2.3.4 "/entrypoint.sh --gl…" 0 0B 50 minutes ago Up 49 minutes (healthy) traefik
...Local Volumes space usage:
VOLUME NAME LINKS SIZE
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
当然,如果只希望看到哪些镜像比较大,则可以使用下面的命令:
docker images --format '{{.Size}}\t{{.Repository}}\t{{.Tag}}\t{{.ID}}' | sed 's/ //' | sort -h -r | column -t
随着 Docker 客户端的更新,有时更新客户端会导致出现一些莫名其妙的问题。为了解决问题,还可以尝试重新下载客户端进行安装:Intel芯片电脑:https://desktop.docker.com/mac/stable/amd64/Docker.dmg
M1 芯片电脑:https://desktop.docker.com/mac/stable/arm64/Docker.dmg