一、Docker 爆满 C 盘困惑
使用 Docker 部署 web 应用非常简单实用,但是在本地运行 Docker 项目多了会面临吃内存的情况。想必 Docker 吃内存的情况对不少实用 Docker 小伙伴造成了困扰。有的可能就直接卸载了重新再来。然后又发生了又重新卸载,循环往复,不能自拔。
二、前提条件
这篇文章直接适用以下开发环境的小伙伴:
- Windows 环境
- WSL 版本 Docker
- docker 使用比较多
如果是 MacOS 或者 Linux 其实差不多。只是它们在本地适用基本不分区。
总体上还是推荐在一个空的 Docker 上就进行迁移操作。
三、为什么会爆内存?
- Docker Desktop 软件本身会占用空间
- Docker 会下载镜像文件
- Docker 自身运行会产生镜像和容器以及运行时占据空间
在 Windows 中,这些都是 Docker Desktop 是必须安装了,它提供 Docker 的运行各种命令行和工具和可视化界面。Linux 中你可以不安装界面,适用 cli 与 Docker 进行交互,也可以减小体积。
四、WSL 和 Docker
4.1) WSL 简介
什么是 wsl, 其实就是 windows 中 linux 成为了 windows 子系统。windows docker 默认是基于 wsl,当然你也可以选择非 wsl 运行。这里我们关注 wsl。
4.2) Docker 默认数据安装位置
Docker 安装位置在 %LOCALAPPDATA%/Docker/wsl, 其中 C:\Users\当前用户名\AppData\Local\Docker\wsl\data\ext4.vhdx 文件会显著增大。减小体积直接方法就是将这个文件目录和 docker 查找这个目录指向给改掉。
五、WSL发行版迁移
5.1)如何迁移?
适用 wsl 提供的命令行,基于输出的 .tar 进行迁移。当然还有其他的方式,不是本文关注重点就不介绍了。
5.2)关闭 Docker
如果 Docker 正在运行,我们需要先关闭正在运行的 Docker。
wsl --shutdown
5.3)关闭 WSL 发行版
查看当前 wsl 中发行版
wsl --list -v
其中应该包含:
- docker-desktop
- docker-desktop-data
5.4)导入 tar 文件
适用 wsl 输出 tar 文件备份指定位置(例如 D 盘的某个位置):
wsl --export docker-desktop-data "D:\Docker\wsl\data\docker-desktop-data.tar"
5.5)注销 docker-desktop-data
wsl --unregister docker-desktop-data
刚开始的时候,我们已经查看了 Docker 的 ext4.vhdx 位置,注销之后此文件会被删除(注意:需要的话请提前备份数据)
5.6)指定新的位置并导入
wsl --import docker-desktop-data "D:\Docker\wsl\data" "D:\Docker\wsl\data\docker-desktop-data.tar" --version 2
使用 wsl 指定新的 docker-desktop-data 文件数据和新文件位置。
5.7)查看数据是否导入成功
导入可能需要一定的时间(尤其是有很多文件),然后查看是否已经存在了 ext4.vhdx 文件。
5.8)重新启动 Docker
在一切都准备完毕之后,重新启动 Docker,如果你 Docker 中存在服务,测试是否正常。然后我们修改 Docker 进项的下载地址。
六、修改 Docker 下载镜像地址
我们知道有的 Docker 镜像很大,如果这种项目多了,势必对 c 盘造成很大压力。 docker 镜像的下载地址也可以修改的。在 Docker Desktop 中我们只需要找到软件的这个为位置(设置 ->资源->Disk image Location),重新选择一个修改即可。
修改可能修改一定的时间,修改成功会在目标文件夹下创建文件夹:docker-download-images/DockerDesktipWSL
七、小结
本文主要介绍了 Windows Docker c 盘爆满产生的困惑。我们将 Docker 的下载文件和运行时文件和 Docker 下载的镜像文件迁移到非 C 盘中的过程。