前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提升 Docker Desktop For macOS 磁盘使用率

提升 Docker Desktop For macOS 磁盘使用率

原创
作者头像
soulteary
修改2021-04-25 10:56:55
2.1K0
修改2021-04-25 10:56:55
举报

本篇文章分享一些软件使用上的细节,以及如何提升磁盘利用率。

使用工具镜像和官方命令回收空间

如果你和我一样,使用 macOS 设备依赖容器做开发调试,那么随着时间的推移,会发现 “Docker 应用” 相关进程占用资源越来越多,即使在关闭所有容器应用后,使用 docker system prune 清理也不见效果。

早在几年前,就有人在官方反馈了关于硬盘空间未被正确释放的问题:Docker.qcow2 never shrinks - disk space usage leak in docker for mac #371

一般情况下,解决这个问题的方案只需要两步,先执行下面的命令,触发 Docker 文件系统回收:

代码语言:txt
复制
docker run --privileged --pid=host docker/desktop-reclaim-space

然后再接着执行 docker system prune,稍等片刻即能看到磁盘用量有了明显的减少了。

最后使用 ls 查看文件尺寸,就能够看到尺寸占用被有效的减少啦:

代码语言:txt
复制
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,推送到私有仓库中,关于私有仓库的搭建,我之前有提过,感兴趣可以自行翻阅

批量保存和导入容器镜像

原本想使用网上现成的命令,但是看了下都写的又啰嗦又长,于是忍不住写了“一句话”:

代码语言:txt
复制
docker images | sed '1d' | grep -v '<none>' | awk '{print "docker save " $1 ":" $2 " -o " $3 ".tar"}' | bash

执行脚本后,机器上所有带有明确名称和版本的镜像,都会被以镜像短哈希为名称保存在目录,类似下面这样:

代码语言:txt
复制
# ls

01ea9392758f.tar 15a2df82c761.tar 313ec0a602bc.tar 5b9fb7872be3.tar 6f30fe65343e.tar 87856cc39862.tar a2a93b311e0e.tar bc5f6567b763.tar ceaa524ee3b1.tar e6a265c1314b.tar f6177e61da84.tar
021b77fe23d6.tar 1617b566916e.tar 331f6103c235.tar 5c534be56eca.tar 70b2fa94882b.tar 88cb36859803.tar a3cae8598d52.tar bd02fe5289fa.tar cfb931188dab.tar e6f71bee28c9.tar f643c72bc252.tar
030ee8ff6592.tar 1e5118e1ffd9.tar 35c43ace9216.tar 5d779ff71c18.tar 718f34297111.tar 89ec9da68213.tar a564b7146683.tar bd3a75f0989f.tar d0d95ad4ce06.tar e771efddaca8.tar f6d0b4767a6c.tar
041121f2a17b.tar 1e67abf7ee9f.tar 383066f78c26.tar 5d9483f9a7b2.tar 71a1631a3688.tar 8a4cfb155648.tar a585502d127b.tar bdb6ede651e7.tar d2850632b602.tar e7d08cddf791.tar f6eebe38c409.tar
0626b5a18724.tar 213fd8e5e53c.tar 3a897225a6e4.tar 5fd75c905b52.tar 72ab4137bd85.tar 8b0b67a3050b.tar a7e1d4b5ee81.tar bedece1f06cc.tar d4969c601eaa.tar e80ca3c9b4c0.tar f731cd48185c.tar
067753cb2b67.tar 244309caf158.tar 3a9c0da54047.tar 5ffc7d634411.tar 72e4ef8abf8e.tar 8b53000fc395.tar a8ab5d4abebb.tar
...

而导入镜像就更简单了,使用 lsxargs 写一句话命令就完事:

代码语言:txt
复制
ls *.tar | xargs -I {} docker load -i {}

其他

如果经过清理,磁盘占用还是很大,不妨使用 docker system df -v 来看看到底是哪些镜像、应用、网络、数据卷、缓存占用了磁盘:

代码语言:txt
复制
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

当然,如果只希望看到哪些镜像比较大,则可以使用下面的命令:

代码语言:txt
复制
docker images --format '{{.Size}}\t{{.Repository}}\t{{.Tag}}\t{{.ID}}' | sed 's/ //' | sort -h -r | column -t

随着 Docker 客户端的更新,有时更新客户端会导致出现一些莫名其妙的问题。为了解决问题,还可以尝试重新下载客户端进行安装:

--EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2021年04月24日

统计字数: 3579字

阅读时间: 8分钟阅读

本文链接: https://soulteary.com/2021/04/24/improve-docker-desktop-for-macos-disk-usage.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用工具镜像和官方命令回收空间
  • 重置应用强制回收空间
    • 批量保存和导入容器镜像
    • 其他
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档