当前位置: 首页>移动开发>正文

容器mac固定 macbook 容器disk1

提升 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


 




https://www.xamrdz.com/mobile/43b1938636.html

相关文章: