由于现在 docker Desktop 默认使用 WSL 2 来运行,而不是以前的 Hyper-V。 所以 在win10上安装 docker Desktop时没有存储路径选择,而是直接默认安装到了系统 C盘,这样后续使用一些镜像后,日积月累C盘空间会越来越小。
镜像文件位置是在C盘下的用户名下的\AppData\Local\Docker\wsl
例如我的保存位置是:
C:\Users\Admin\AppData\Local\Docker\wsl
默认情况下,Docker Desktop for Window会创建如下两个发行版(distro):
- docker-desktop
- docker-desktop-data
如果访问 %LOCALAPPDATA%/Docker/wsl
目录,就可以看到两个文件夹(data和distro),同时每个文件夹中都会有一个vhdx文件,而且这两个文件夹的占用空间会非常的大。
%LOCALAPPDATA%
就是当前登录用户的AppData\Local目录,
假设当前登录的用户为Admin,那么这个目录就是 C:\User\Admin\AppData\Local\Docker\wsl
data/ext4.vhdx 是被 docker-desktop-data
发行版使用
distro/ext4.vhdx 是被 docker-desktop
发行版使用
docker-desktop-data 是被用来存储docker images 以及相关的数据。因此,它的大小会随着使用逐步增长,因此导致系统盘空间不足。 vhdx文件最大支持256G,超出这个大小将会出错。参见:官方说明
一:将镜像导出
罗列出现在在使用WSL的。在CMD命令窗口执行 wsl –list -v 假设你当前已经正常运行了 docker Desktop ,此时你会看到类似以下情况
C:\Users\Admin>wsl -l --all -v
NAME STATE VERSION
* docker-desktop-data Running 2
docker-desktop Running 2
可能你的会有所不同,比如多了一个 Ubuntu Running 2
,这个是你安装wsl2.0时默认安装的linux发行版,因为我不需要Linux环境,而安装Docker Desktop for Window时会自动安装 docker-desktop-data 和 docker-desktop 这两个docker专用发行版,所以我安装好wsl2.0后就把这个 Ubuntu 删除了
现在打开 Docker Desktop 软件面板,先把所有的正在运行的容器全部停止,然后在电桌面的右下角点击 Docker Desktop 图标退出当前应用
关闭WSL,执行命令 wsl --shutdown
再次查看 当前WSL运行情况。使用的命令还是:wsl –list -v.我们可以看到 STATE都已经是Stopped的了。
C:\Users\Admin>wsl -l --all -v
NAME STATE VERSION
* docker-desktop-data Stopped 2
docker-desktop Stopped 2
导出镜像并压缩为tar.注意:导出的路径要提前创建好,不然执行命令会报错的。执行命令公式:
wsl --export docker-desktop-data <导出后存放的文件路径>
我提前创建好了保存文件位置,并且创建好镜像文件生成位置,也就是ext4.vhdx文件位置 为保证可读性,我创建的和原来的文件夹基本一致
D:\DockerData\wsl // 导出文件保存位置
D:\DockerData\wsl\data // docker-desktop-data镜像文件位置
D:\DockerData\wsl\distro // docker-desktop镜像文件位置
所以我导出doceker-desktop、docker-desktop-data 命令如下:
wsl --export docker-desktop D:\DockerData\wsl\docker-desktop.tar
wsl --export docker-desktop-data D:\DockerData\wsl\docker-desktop-data.tar
如果有Ubuntu和上面类似方式导出就行 如果文件比较大的话,导出需要耗费一些时间。耐心等待导出完成即可 导出完成后,我的文件目录结构如下
二:注销原来的docker镜像
使用命令公式:
wsl --unregister <需要注销的名称>
我的注销命令为:
#注销原来的 Docker 镜像
#wsl --unregister Ubuntu 需要的可以注销
wsl --unregister docker-desktop-data
wsl --unregister docker-desktop
C:\Users\Admin>wsl --unregister docker-desktop-data
正在注销。
操作成功完成。
C:\Users\Admin>wsl --unregister docker-desktop
正在注销。
操作成功完成。
三条命令都执行完成之后,就注销了。注销之后,再去看C盘空间,此时就能看到空间已经释放出来了
三:将导出的Docker镜像在导入到wsl,并设置挂载的文件目录
使用的命令公式为: wsl –import <分配的名字> <本地保存路径><文件名>
套用公式,可以得到我需要导入的两条命令:
wsl --import docker-desktop D:\DockerData\wsl\distro D:\DockerData\wsl\docker-desktop.tar
wsl --import docker-desktop-data D:\DockerData\wsl\data D:\DockerData\wsl\docker-desktop-data.tar
执行完成之后,我们使用wsl –list -v,查看是否成功。如下:
C:\Users\Admin>wsl --list -v
NAME STATE VERSION
* docker-desktop Stopped 2
docker-desktop-data Stopped 2
可以看到,都已经导入成功。接下来,启动 Docker Desktop 即可。