当macos空间不足,我们往往想把各种东西放在外接硬盘中,例如虚拟机、游戏等等,如果在系统中安装了docker,其镜像和容器往往也会占据较大的空间,因此将docker放置在外接硬盘中是一件非常nice的事情。采用的核心思想是找到文件系统中存储数据的目录,然后使用软链接的方式将其存放在外接硬盘之中。

  1. 首先需要安装docker,这里直接使用brew install docker,如果是安装docker desktop的话会包含“运行时”,但是此时是没有的,直接运行docker pull xxx会报错
1
2
$ docker pull redis
Cannot connect to the Docker daemon at unix:///Users/xxx/.orbstack/run/docker.sock. Is the docker daemon running?
  1. 这里不使用docker desktop for mac,它的资源开销过大,我们使用OrbStack作为macos的运行环境,按照官方文档所述安装即可:brew install orbstack
  2. 直接打开OrbStack后,可以查看文件的位置,如下图所示

image-20240826164400546

打开软件后默认开启运行时环境,如果想关闭的话,可以运行orb stop。事实上关闭该软件的时候,orb仍然在运行

  1. 打开存储位置大概是这样,会在网络的地方出现一个OrbStack的宗卷,这个宗卷里的docker文件夹包含容器、镜像和挂载卷

image-20240826164647340

  1. 我们的目的就是对这个文件夹创建软链接,这个文件夹肯定是存储在我们本地磁盘的,在哪呢?其实是~/.orbstack/data/里,这个文件夹中有3个文件,如下:

    1. data.img
    2. README.txt
    3. swap.img

    其中data.img显示的大小是8.8TB,对应的就是上面说的OrbStack的宗卷,可以看到他们的实际大小一致

image-20240826170115696

  1. 所以其实整个OrbStack的数据都存储在~/.orbstack/data/底下,接下来的关键就是把这个文件移动到外接硬盘上去。然而直接复制粘贴是不行的,因为这里面有个虚假8.8TB的磁盘映像,所以我们按照如下步骤,先直接把这个~/.orbstack/data/删了,再建立软链接,最后让OrbStack在外接硬盘上重新生成一份。

    1. 删除~/.orbstack/data/
    2. 创建软链接:ln -s /Volumes/your/path/.orbstack/data ~/.orbstack/data
    3. 重新打开OrbStack,在偏好设置中Reset Docker,如下图所示

    image-20240826170928164

  2. 最后得到的效果应该类似这样,然后正常地使用docker命令拉镜像就行

image-20240826171023275

注意⚠️

外接硬盘必须是APFS格式,否则创建好软链接后OrbStack启动时会报错

如果是MacOS和Windows共用的硬盘,格式应该是ExFat,该格式是不支持的

⚠️⚠️⚠️


此外,Obstack还有创建虚拟机的功能,相当于把虚拟机的文件系统都放在硬盘里,非常优雅。

image-20240827100851293