[转]提升 Docker Desktop For macOS 磁盘使用率

提升 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 " $1 ":" $2 " -o " $3 ".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
 

posted @   Don  阅读(245)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示