Docker Desktop镜像、容器的存储路径

早在Windows 7系统下学习安装Docker ToolBox[1]时,就有个疑问,Docker的镜像和容器的实际文件存放在哪里?[2]

然后升级到Windows 10系统,版本1809,启用WSL 1,安装Docker Desktop[3],那其镜像和容器的实际文件又存放在哪里?

最近,将WSL 1 升级到 WSL 2[升级步骤], 并将Docker的基础引擎设置为WSL 2,镜像和容器的实际文件存放位置有没有变化?

为了解这几个问题,查看了部分资料,记录在此,以便以后了解及更正;

一、 WSL

WSL 的全称叫做:Windows Subsystem for Linux,即「适用于 Linux 的 Windows 子系统」;可让开发人员按原样运行 GNU/Linux 环境 – 包括大多数命令行工具、实用工具和应用程序 – 且不会产生传统虚拟机(a traditional virtual machine )或双启动设置开销。

1.1、WSL 1 和 WSL 2

这两者之间的区别,详细参考官网上的说明,并建议阅读dowww的这篇,可以更直观地了解两者实现方式的区别;

关于WSL 2,还可从这篇介绍(Announcing WSL 2)中了解到更多信息;

更多动态,查看官方仓库:microsoft/WSL

1.2、 WSL 下的各分发版本的存储位置

参考:#1148 #1176
存储位置:

%localappdata%/Packages/

可通过如下命令查看分发版本的完整信息名:

Get-AppxPackage -Name "**" | Select PackageFamilyName

结果如下图所示:

也可从注册表以下位置查看获得:

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss

1.3、强调几点我所理解的:

  • WSL 1 需要中间兼容层,与Linux内核进行通讯;不支持Docker;
  • WSL 2 拥有完整的 Linux 内核;支持Docker;
  • WSL 2 仅适用于 Windows 10 版本 1903、内部版本 18362 或更高版本。

二、 Docker Desktop 与 WSL

2.1、Docker Desktop 与 WSL 1

基于WSL 1的Linux分发版本是不支持Docker的,所以Docker Desktop使用Hyper-V托管DockerDesktopVM虚拟机(LinuxKit Distro)来实现镜像、容器功能的;
DockerDesktopVM的VM文件存放位置如图所示;

所以,Docker Desktop 与 WSL 1 并没有关系;
此时,称之为Docker Desktop Hyper-V Backend架构;

2.2、Docker Desktop on WSL 2

自WSL 2推出后,Docker更新了对其支持的版本,目前我所用Docker Desktop的版本是:

WSL 2 命令

wsl -l -v

列出可供使用的Linux发行版信息;如文章内第一张图中所示;
其中Ubuntu-18.04是自己安装的,那docker-desktop / docker-desktop-data 是怎么回事?

Docker-desktop, which I’ll call the bootstrapping distro
Docker-desktop-data, which I’ll call the data store distro

参考stackoverflow#61396989 的回答;

Docker Desktop on WSL 2
配图是官方博客《Introducing the Docker Desktop WSL 2 Backend》一文中所提及的,仔细阅读后,我删除了一些我已写下的内容;因为只要阅读该文,就能对本文2.1、2.2提及的实现原理有了整体的认识。

三、总结

回到主题,Docker Desktop镜像、容器的存储路径在哪里?
根据自身操作系统的版本,以及Docker是否启用WSL 2(今后,若WSL 2稳定,Docker会默认启用WSL 2),结合本方前两点以及诸多引用的文章,相信找到具体的存储路径不再是难事了。

这篇文章写了好几天了,主要还是因为所了解到的知识的极度匮乏!
我相信随着更多的认识,还会再修改,若您有更多认识或有资料分享,欢迎您留言讨论,谢谢!

补:

系统盘通常预留的空间,会随着Docker下镜像和容器的数量增涨,而越来越吃紧,影响系统的运行;
如何变更WSL 2 下的Docker Desktop 文件存放位置?
这个问题在stackoverflow#62441307上已有确认的答案,
大致过程:

wsl --shutdown
wsl --export docker-desktop-data "v:\docker\wsl\data\docker-desktop-data.tar"
# 执行该命令前,需要在对应位置创建好目录,否则会出现 “系统找不到指定的路径。”的错误提示
wsl --unregister docker-desktop-data

为了安全,建议备份ext4.vhdx文件,存储位置参考 #1.2

wsl --import docker-desktop-data "v:\docker\wsl\data" "v:\docker\wsl\data\docker-desktop-data.tar" --version 2
# 导入后启动Docker Desktop即可

[1] http://note.youdao.com/noteshare?id=9377240d9217bc28efbe206d853e96a2&sub=56E5AED3F43043B589C79EDD697C5375

[2] https://forums.docker.com/t/where-are-images-stored/9794

[3] http://note.youdao.com/noteshare?id=4dae477f537ed70c633b0ea0232e5df2&sub=C5A1515AA46B44F39B31CB35AC2E8F19

发表评论

电子邮件地址不会被公开。 必填项已用*标注