1. docker for wsl2
在wsl2中使用docker的最佳实践不是在wsl2中安装docker,而是安装docker desktop:
从docker官网下载并安装完成后,打开docker desktop,选择setting->General,确保Use the WSL 2 based engine选项被勾选,然后选择右下角Apply&Restart。

重启docker desktop后,再次打开设置,确保setting->Resources->WSL INTEGRATION选项页中你的WSL发行版被勾选。

完成以上步骤之后,打开你的wsl, 输入docker:

出现这一堆说明安装成功。
使用docker run helloworld验证你的docker可以正常启动容器。

如果输入
docker命令后无法启动,可以尝试sudo docker
2. k8s for wsl2
安装了docker desktop后,可以通过setting->Kubernetes,勾选Enable Kubernetes来为你的wsl提供k8s服务,但由于网络问题,通常不可能成功。
所以我们要"换源"。
打开setting->Docker Engine,将右侧配置文件改为:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"insecure-registries": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}

Apply&Restart,重启docker desktop。
现在我们还需要一些额外的镜像。 clone AliyunContainerService/k8s-for-docker-desktop 这个项目。
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git
查看自己的docker desktop上Kubernetes的版本。

可以看到我们这里是v1.21.2。相应的,我们进入刚才clone的文件夹下,切换到v1.21.2分支
git checkout v1.21.2
切换分支后,在当前目录下执行:
.\load_images.ps1
如果因为安全策略无法执行 PowerShell 脚本,请在 “以管理员身份运行” 的 PowerShell 中执行
Set-ExecutionPolicy RemoteSigned命令
最后一步,setting->Kubernetes 确保Enable Kubernetes被勾选,然后Apply&Restart,这时候你的docker desktop左下角会出现k8s的图标,并逐渐从黄色变成绿色,代表你的k8s环境启动成功。

References
Get started with Docker remote containers on WSL 2 Docker Desktop WSL 2 backend AliyunContainerService/k8s-for-docker-desktop 在 Docker Desktop 中启用 K8s 服务