早在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 下的各分发版本的存储位置
%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 的回答;
配图是官方博客《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即可
[2] https://forums.docker.com/t/where-are-images-stored/9794