几个命令!从此告别 Windows Docker 爆满内存

3,317 阅读3分钟

top.png

一、Docker 爆满 C 盘困惑

jackie-chan-confused-coloring-page.png

使用 Docker 部署 web 应用非常简单实用,但是在本地运行 Docker 项目多了会面临吃内存的情况。想必 Docker 吃内存的情况对不少实用 Docker 小伙伴造成了困扰。有的可能就直接卸载了重新再来。然后又发生了又重新卸载,循环往复,不能自拔。

二、前提条件

这篇文章直接适用以下开发环境的小伙伴:

  • Windows 环境
  • WSL 版本 Docker
  • docker 使用比较多

如果是 MacOS 或者 Linux 其实差不多。只是它们在本地适用基本不分区

总体上还是推荐在一个空的 Docker 上就进行迁移操作。

三、为什么会爆内存?

images.jpg

  • Docker Desktop 软件本身会占用空间
  • Docker 会下载镜像文件
  • Docker 自身运行会产生镜像和容器以及运行时占据空间

在 Windows 中,这些都是 Docker Desktop 是必须安装了,它提供 Docker 的运行各种命令行和工具和可视化界面。Linux 中你可以不安装界面,适用 cli 与 Docker 进行交互,也可以减小体积。

四、WSL 和 Docker

4.1) WSL 简介

wsl.jpg

什么是 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镜像下载地址.png

修改可能修改一定的时间,修改成功会在目标文件夹下创建文件夹:docker-download-images/DockerDesktipWSL

修改成功之后会自动生成文件夹.png

七、小结

本文主要介绍了 Windows Docker c 盘爆满产生的困惑。我们将 Docker 的下载文件和运行时文件和 Docker 下载的镜像文件迁移到非 C 盘中的过程。