WSL2的安装以及在其下的Ubuntu安装docker、milvus教程
本文介绍了wsl2安装和使用,并在其下安装的Ubuntu系统中安装和使用docker的教程
一、WSL2安装教程
1.微软官方文档教程
链接地址:安装 WSL 。先知道有这个,可以先看看后面的先决条件
2.先决条件
-
必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令
查看方法:win+R键,键入
winver,点击确定
-
必须是windows专业版、企业版或教育版。但是现在家庭版也可以了,不过需要以下操作
新建文件Hyper-V.txt,写入以下内容
pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL然后将文件后缀名改为cmd或bat,右键以管理员身份运行即可(运行时间可能需要几分钟,运行之前可以检查一下自己的电脑是否添加了英语语言,建议提前安装一下英语(美国)),安装完成后会提示重启,可以先不要重启查看是否安装上再重启。查看方法:按一下
win键,直接输入启用或关闭Windows功能(一般不需输入全),搜索出来后直接Enter,可以看到:
本段参考文章【冰爪科技】解决 Windows 家庭版没有 Hyper-V - 知乎
注:win11的系统的虚拟化平台不是中文显示,而是Virtual Machine Platform英文显示 -
CPU是否支持虚拟化
可以百度看一下自己的电脑CPU是否支持虚拟化,不支持的话是开不了虚拟的。
查看是否开启虚拟化可以打开任务管理器,进入性能选项卡,查看CPU

开启虚拟化需要进入电脑的BIOS进行设置,可以自行百度如何进入BIOS界面打开相应功能,一般是开机时按
ESC或Delete或F2键进入。Intel和AMD的CPU开启虚拟化设置的名称不同,AMD的一般为SVM Mode,将此设置为Enabled即可(本人踩的另一个坑,紧挨着SVM Mode选项下的UMA Frame buffer Size选项没有设置为Auto,导致开启SVM Mode后重启电脑一直黑屏不显示任何东西,无法进行任何操作,需要重新进入BIOS将UMA Frame buffer Size选项设置为Auto)。Intel的可能为Intel Virtual Technology
总结一下步骤:先查看windows版本是否支持,然后查看虚拟化是否打开,最后是否是家庭版,是的话直接按照2所述进行安装但是先不要重启,安装后打开那三个选项后再立即重启。按此步骤运行完后可能使用wsl --status就已经显示出了wsl的默认版本号,再使用wsl --update命令更新一下就可以了。但是这样的话就没有安装任何Linux发行版,需要你自己下载(适合有导出版本压缩包的用户使用)
3.一行命令安装WSL2
在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,然后重启计算机。(加了--web-download可以减少因为网络问题导致的下载失败)
wsl --install --web-download
该命令会默认安装,如果想要改默认安装后的位置可以参考这篇文章如何查看WSL默认安装位置以及挪动其到指定安装路径-CSDN博客
注:如果你是直接执行这个命令而没有将先决条件完成的话,可能不会自动安装ubuntu系统(使用命令wsl --status有信息就说明wsl安装成功了),你需要到微软的应用商店手动下载Ubuntu系统,可以下LTS版的(长期支持)。下载完在打开是一样的
4.设置用户名和密码
wsl --install执行成功后会让你设置用户名和密码。参考设置 WSL 开发环境 | Microsoft Learn
二、WSL2常用命令
可查看WSL 的基本命令 | Microsoft Learn。使用wsl --help可以查看帮助
本文所有命令中出现<>的都不用输入,出现|(竖杠)只需输入其中一个就行
-
查看当前状态
wsl --status -
设置默认Linux发行版,以下命令可简写为
wsl -s <Distro>,其中<Distro>为发行的Linux版本名称wsl --set-default <Distro> -
查看已安装的Linux详细信息,以下命令可简写为
wsl -l -vwsl --list --verbose -
列出可用的 Linux 发行版,该命令可能需要科学上网或者调整DNS域名地址才能看到结果
wsl --list --online -
安装以上命令显示的Linux
wsl --install <Distribution Name> --web-download -
设置默认的Linux发行版本,
<Distribution Name>为发行版Linux名称wsl --set-default <Distribution Name> -
运行特定的 Linux 发行版(直接在开始菜单点击Ubuntu也可以运行,默认以最开始设置的用户登录)
wsl --distribution <Distribution Name> --user <User Name>将
<Distribution Name>替换为你首选的 Linux 发行版的名称,将<User Name>替换为现有用户的名称。也可以不加–user及其后面的内容。简写的命令wsl -d <Distribution Name> -
退出。运行Linux后输入
exit就自动退出Linux系统了exit -
关闭
wsl --shutdown #立即终止所有的正在运行的发行版和WSL2轻量级实用工具虚拟机 wsl --terminate <Distribution Name> # 终止指定的发行版 # Linux里面关闭Linux命令 sudo shutdown # 一分钟后关闭 sudo shutdown -P now # 立即关闭 sudo +t # t分钟后关闭 shutdown -c # 取消关闭的命令 -
注销并卸载 WSL 发行版
wsl --unregister <DistributionName> -
导出
wsl --export <Distribution Name> <FileName>这里的
<Distribution Name>为你要导出的发行版的名字,<FileName>为你要导出的文件夹路径和导出的文件名,例如D:\temporaryFile\Ubuntu.tar,D:\temporaryFile\为文件路径。Ubuntu.tar为要导出的文件名,一般以.tar的后缀结尾 -
导入
wsl --import Ubuntu D:\software\Ubuntu D:\temporaryFile\Ubuntu.tar--import后面一共有三个参数,第一个为导入的Linux发行版名称,第二个为要导入的目标路径,建议不放在C盘节省空间,第三个为导出的.tar文件路径导入的镜像会默认以root用户启动,要想修改默认的启动用户请以管理员的身份运行终端并执行以下命令
ubuntu2204.exe config --default-user <username>这里的
ubuntu2204.exe要看你需要设置的ubuntu版本,若为ubuntu-24.04版本则为ubuntu2404.exe,这里的<username>则替换为你当初设置的用户名即可
要是出现无法找到ubuntu2204.exe命令则可以使用如下办法。在Ubunt系统中创建/etc/wsl.conf文件(已有就不用创建了),写入以下内容,改为自己的用户名。然后关闭重新启动即可[user] deafult=<username> -
更新wsl
wsl --update -
解决重装系统后且没有导出为tar格式的包,但是能够找到原来系统的
.vhdx虚拟印象文件的导入问题
首先使用查找的方法wsl --import-in-place Ubuntu-22.04 D:\software\Ubuntu-22.04\ext4.vhdx # 会报错以下信息 # 无法将磁盘“\\?\D:\software\Ubuntu-22.04\ext4.vhdx”附加到 WSL2: 拒绝访问。 # 错误代码: Wsl/Service/RegisterDistro/MountDisk/HCS/E_ACCESSDENIED直接使用导入命令会报错
wsl --import Ubuntu-22.04 D:\software\wsl\ubuntu-22.04 D:\software\Ubuntu-22.04\ext4.vhdx # 报错 # 这似乎是 VHDX 文件。使用 --vhd 导入 VHDX 而不是 tar。最后的解决办法是使用以下命令进行系统的导入,Ubuntu-22.04为导入的系统名,前一个文件地址为导入后保存的位置(如果没有的话需要先创建),后一个地址为印象文件的路径,
--version 2指定使用发行版本为2的wsl,--vhd表示明确告诉wsl --import命令,你正在导入的文件是一个虚拟硬盘(VHDX)文件wsl --import Ubuntu-22.04 D:\software\wsl\ubuntu-22.04 D:\software\Ubuntu-22.04\ext4.vhdx --version 2 --vhd导入完成后,原来的文件可以删除了避免占用空间
三、添加CentOS的方法
wsl --list --online该命令会展示出可以进行安装的Linux,但是种类较少,想要安装CentOS怎么办?
访问GitHub - mishamosher/CentOS-WSL: A GitHub Actions automated CentOS RootFS to use with WSL。找想要安装的centOS版本



解压的位置就为该系统的安装位置,所以建议解压到你想要的最终安装位置
安装成功后可以使用wsl -l -v命令查看是否安装成功
ps:可以再微软商城下载一个Windows Terminal Preview软件进行操作,比较方便。可以同时打开多个终端包括安装完成的Linux,打开和关闭比使用命令行来的快
四、Ubuntu部分命令
有的命令需要加sudo关键字使用管理员权限才能够运行,例如sudo reboot重启命令。权限不够系统会提示
-
查看版本
lsb_release -a -
查看当前文件路径
pwd -
重启命令
sudo reboot sudo shutdown -r -
创建文件夹。例如
mkdir milvus将在当前路径下创建milvus文件夹mkdir <文件夹名称> -
创建文件。例如
touch compose.yaml将在当前路径下创建compose.yaml文件touch compose.yaml -
编辑文件。
vi compose.yaml或vim compose.yaml将打开vi或vim编辑器对文件compose.yaml进行编辑vi compose.yaml vim compose.yaml -
查看文件。
cat compose.yaml将显示compose.yaml文件内容cat compose.yaml -
删除文件和文件夹。使用
rm命令删除的文件会永久消失rm <文件名> # 删除文件 rm -f <文件名> # 强制删除文件 rm -r <文件夹名> # 级联删除文件夹及其下的所有文件 rm -rf <文件夹名> # 强制级联删除文件夹及其下的所有文件 -
启动和关闭docker
systemctl start docker # 启动docker服务 sudo systemctl daemon-reload #docker守护进程重启 systemctl restart docker # docker服务重启 sudo service docker restart # docker服务重启 service docker stop # 关闭docker systemctl stop docker # 关闭docker -
查看登录的用户名
who|w -
设置用户密码。输入以下命令后系统会提示你输入新的密码
sudo passwd <username> -
清屏
clear
五、在WSL2的Ubuntu镜像中安装docker
1.安装docker
我这里安装的是docker engine。官网docker engine Ubuntu安装
首先执行命令卸载所有冲突的软件包(可能并不会卸载调任何包,因为没有)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
然后复制以下命令粘贴执行,设置Docker官方仓库并安装相关依赖项
# 添加Docker的官方GPG密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 将存储库添加到apt源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证是否安装成功
docker --version # 正确显示版本后就可以
2.设置镜像源
设置镜像,因为国外服务器访问很慢甚至访问不了。还有就是某些镜像版本更新较快,导致某些国内源来不及或未及时更新会出现一些下载安装的问题。cat /etc/docker/daemon.json执行这个命令如果失败则说明源在国外(wsl2有点好处就是可以直接在资源管理器看到Linux的文件,即使不使用Linux命令),可以按以下命令行的步骤添加镜像源(也可以直接利用windows图形界面操作更方便)
先创建/etc/docker文件夹
sudo mkdir -p /etc/docker
执行以下命令创建daemon.json文件
sudo touch /etc/docker/daemon.json
打开daemon.json文件。打开后按i,进入插入模式,在粘贴内容,之后按ESC进入命令模式,,输入:wq保存退出
sudo vim /etc/docker/daemon.json
复制以下内容到daemon.json文件里,保存退出(这里的源并不全,可以自己在搜索一些源添加进去)
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://cjie.eu.org"
]
}
然后执行以下命令
sudo systemctl daemon-reload #重启daemon进程
sudo systemctl restart docker #重启docker
六、部分docker命令
-
查看镜像
docker images -
查看当前运行的容器
docker ps # 查看在运行中的容器 docker ps -a # 加-a可以显示所有的容器,包括没有运行的容器 -
创建并运行容器,
--name <容器名称>可以省略,系统会默认分配名称docker run --name <容器名称> <镜像名称>|<镜像ID> -
删除容器,有运行的容器要先停止,停止后再删除。可以在容器ID后使用空格加上另一个容器ID同时删除多个容器
dockers rm <容器ID>|<容器ID前三位> -
删除镜像,如果有没删除的容器要先删除容器再删除镜像。可以在镜像ID后使用空格加上另一个镜像ID同时删除多个镜像
docker rmi <镜像ID>|<镜像ID前三位> -
给docker里的容器重新命名
dockers rename <旧容器名> <新容器名> -
删除所有的正在运行的容器和没有运行的容器,但不会删除镜像
docker compose down -v -
利用所有的镜像创建容器并运行
docker compose up -d --force-recreate -
启动和关闭容器
docker start <容器名称>|<容器ID>|<容器ID前三位> # 启动 docker stop <容器名称>|<容器ID>|<容器ID前三位> # 关闭 -
重启docker服务
sudo service docker restart
七、docker中安装milvus、minio、attu、edtc
milvus是用于存储向量的数据库,minio可用于存储图片、视频和音频等文件,attu是milvus的可视化工具。使用这些主要是为了构建本地服务

- 进入后,下载源文件并解压

- 解压后找到文件
docker-compose.yml,用于之后的安装

-
在用户目录(使用pwd查看路径有的是根目录下的root,有的是home\your_username)下创建文件夹milvus,并将第4步中的文件复制到mivlus文件中,然后进入到mivlus文件夹下使用以下命令安装
sudo docker compose up -d如果执行以上命令后报错

请按照该文章中的第五部分的第2个教程设置docker镜像源
安装成功的画面(下载的时间可能比较长)。该命令会自动创建容器并运行,也就是说执行完毕后使用dockers ps命令会显示出正在运行的容器这里有四个

- 然后可以在浏览器中输入
localhost:8000和localhost9000分别访问milvus和minio的可视化界面。milvus的初始地址为milvus:19530,minio的初始用户名和密码均为minioadmin
ps:docker-compose.yml文件的内容。也可以不用下载,直接复制以下内容然后创建一个.yml文件到上文所述的目录里就可以了。这里是官网下载的文件,但是里面的版本并不是github显示的最新版本,不过实测可以使用
version: '3.5' # 指定 docker-compose 文件格式版本。删除这句执行安装命令时就不会显示warn信息
services: # 定义服务列表
etcd: # etcd 服务配置
container_name: milvus-etcd # 容器名称
image: quay.io/coreos/etcd:v3.5.5 # 使用的镜像及版本
environment: # 环境变量设置
- ETCD_AUTO_COMPACTION_MODE=revision # 自动压缩模式设为 revision
- ETCD_AUTO_COMPACTION_RETENTION=1000 # 保留1000个版本
- ETCD_QUOTA_BACKEND_BYTES=4294967296 # 后端配额约4GB
- ETCD_SNAPSHOT_COUNT=50000 # 快照计数设置
volumes: # 卷挂载
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd # 数据持久化存储,存储在自己创建的milvus目录下的volumes下
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd # 启动命令
healthcheck: # 健康检查配置
test: ["CMD", "etcdctl", "endpoint", "health"] # 健康检查命令
interval: 30s # 检查间隔
timeout: 20s # 超时时间
retries: 3 # 重试次数
minio: # MinIO 服务配置
container_name: milvus-minio # 容器名称
image: minio/minio:RELEASE.2023-03-20T20-16-18Z # 使用的镜像及版本
environment: # 环境变量
MINIO_ACCESS_KEY: minioadmin # 访问可视化界面时的用户名
MINIO_SECRET_KEY: minioadmin # 访问可视化界面时的密钥,可以在这里修改
ports: # 端口映射
- "9001:9001" # 控制台端口
- "9000:9000" # API端口
volumes: # 卷挂载
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data # 数据持久化
command: minio server /minio_data --console-address ":9001" # 启动命令
healthcheck: # 健康检查配置
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
milvus: # Milvus 服务配置
container_name: milvus-standalone # 容器名称
image: milvusdb/milvus:v2.4.12 # 使用的镜像及版本
command: ["milvus", "run", "standalone"] # 以独立模式运行
security_opt: # 安全选项
- seccomp:unconfined # 禁用 seccomp 安全配置
environment: # 环境变量
ETCD_ENDPOINTS: etcd:2379 # etcd 连接地址
MINIO_ADDRESS: minio:9000 # MinIO 连接地址
volumes: # 卷挂载
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus # 数据持久化
healthcheck: # 健康检查配置
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports: # 端口映射
- "19530:19530" # Milvus 服务端口
- "9091:9091" # 健康检查端口
depends_on: # 依赖服务
- "etcd"
- "minio"
attu: # Attu Web UI 服务配置
container_name: milvus-attu # 容器名称
image: zilliz/attu:v2.4 # 使用的镜像及版本
environment: # 环境变量
MILVUS_URL: milvus:19530 # Milvus 连接地址
ports: # 端口映射
- "8000:3000" # Web UI 访问端口
depends_on: # 依赖服务
- "milvus"
networks: # 网络配置
- default
networks: # 网络定义
default: # 默认网络
name: milvus_network # 网络名称
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)