先说一下windows下docker安装的要求:
1、bios支持intel VT-x,就是支持虚拟化。
2、启用或关闭windows功能这里要选中hyper-v,windows虚拟机监控程序平台,适用于Linux的Windows子系统
3、windows10 1903版本及以上
4、打开基于虚拟化的安全,设置已启用。
关于前面三个都好设置,其实最容易忽视的就是第四个,我当时按照前面三个一一检查,设置,确信没有问题,但是wsl -l -v显示虚拟机版本还是有问题,最后根据安装提示:
Wsl/Service/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED
才找到问题所在:

我系统原来安装过ubuntu2204,但是再安装新的ubuntu2404又不行了,这个就很矛盾,各种设置都不生效,最后找到是本地组策略里面还有一个虚拟化的安全。
进入这个设置:win+x,然后输入gpedit.msc回车,就会打开本地组策略编辑器。按照目录结构找到虚拟化安全即可。
我这里安装不上ubuntu2404的时候,默认是未配置的,切换到已启用,ubuntu2404就安装上了。后续的设置wsl2也好使了。
至于ubuntu虚拟机的安装,我们直接在winstore商店里面查找wsl或者ubuntu就可以出现。
========================================================
因为windows上的docker需要借助ubuntu系统来作寄宿linux,所以我们需要安装ubuntu作为子系统。而且docker还需要wsl版本为2。默认1是不行的,所以我们要升级。
bash
wsl --update
wsl --set-version Ubuntu2204 2
安装完ubuntu虚拟机之后,我们就可以设置版本为2了。正确的版本如下所示:

安装docker-desktop就好说了,就是一般的程序安装。
这里我需要启动redis实例,我通过compose方式启动,首先设置docker-compose.yml文件:
bash
services:
redis:
image: redis:6.2.18
container_name: redis
ports:
- "6379:6379"
volumes:
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
实例会利用redis:6.2.18镜像,映射本地6379端口,目录和配置文件映射当前文件夹的data和conf/redis.conf。
本地设置的文件目录结构:

值得一提的是,conf/redis.conf这个配置文件,最后是redis-server启动的时候读取的配置文件,我们需要修改几个配置:
bash
bind 0.0.0.0 // 绑定本机,外部可访问
protected-mode no // 容许远程连接
appendonly yes // 持久化方式
data ../data // 持久化目录,这里data目录在conf/redis.conf的上级所以这里需要修改,否则出错
这里如果bind默认127.0.0.1,那么容器启动正常,可是访问失败,就像下图这样:

启动命令直接 docker compose up -d

启动容器,我们可以在docker-desktop界面,找到该容器,然后选择Open in terminal

接着我们就可以像在linux里面通过docker exec -it redis /bin/bash命令进入容器实例一样:

这里Tab标题是Exec,其实就可以理解通过docker exec -it的方式进入容器的。
因为容器配置文件docker-compose.yml里面指定了相关文件以及文件夹的映射,所以我们在windows系统下,也能看到映射出来的文件。

至此,windows上通过docker-desktop方式启动redis实例就完成了,其中最关键的一个配置就是redis.conf下bind 0.0.0.0。
windows下的docker运行在linux系统之上,所以我们要提前安装ubuntu系统。