环境
- 操作系统:win11家庭版 版本号: 24H2 (版本:26100.3476)
- CPU类型: 英特尔CPU
安装wsl2
启用Linux子系统
控制面板(查看方式:小图标) > 程序和功能 > 启用或关闭Windows功能
更新wsl版本
bash
# 更新wsl为最新版本
wsl --update
如果上面的命令下载速度过慢,则可以采用离线方式更新(使用下面的地址,下载最新的稳定版msi安装包,然后双击安装)
Releases · microsoft/WSL · GitHub
查看当前版本
csharp
# 查看当前版本
wsl --version
# 将wsl设置为2(win11默认是2,可以不设置)
wsl --set-default-version 2
wsl2常用命令
- 列出已安装发行版和发行版运行状态:
wsl -l -v
- 运行某个发行版:
wsl -d Ubuntu-24.04
(此时会以默认用户登录)wsl -d Ubuntu-20.04 -u yourusername
(此时会以特定用户登录) - 终止(关闭)指定发行版:
wsl --terminate <Distribution Name>
- 从发行版的命令行中退出(并让发行版继续运行): 先执行
sync
, 再执行logout
- 查看默认发行版:
wsl -l
- 设置默认发行版:
wsl --set-default-version Ubuntu-24.04
- 查看wsl状态:
wsl --status
- 查看wsl版本:
wsl --version
- 关闭wsl:
wsl --shutdown
- 导出发行版:
wsl --export <Distribution Name> <FileName>
- 导入发行版:
wsl --import <Distribution Name> <InstallLocation> <FileName>
- 注销或卸载 Linux 发行版:
wsl --unregister <DistributionName>
- 返回通过 WSL 2 安装的 Linux 发行版 IP 地址(WSL 2 VM 地址):
wsl hostname -I
- 返回从 WSL 2 (WSL 2 VM) 看到的 Windows 计算机的 IP 地址:
ip route show | grep -i default | awk '{ print $3}'
安装一个 WSL Linux 发行版
从微软应用商店安装(选择一个发行版): ubuntu - Microsoft Apps
我选的是Ubuntu 24.04.1 LTS
安装完毕之后,第一次打开会弹出窗口进行初始化操作,并让你设置账户和密码 (请务必记住该账号和密码)。账户密码设置完后就会自动进入发行版系统,接下来就可以探索咱们安装的Linux系统了
将更新源设置为国内源
注意:新版本的ubuntu更新源设置与旧版本的不同,我这个是新版本更新源设置
备份源配置
shell
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
编辑源配置
bash
sudo vim /etc/apt/sources.list.d/ubuntu.sources
将文件内容替换为:
makefile
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
更新
csharp
# 更新软件源
sudo apt-get update
# 升级所有软件
sudo apt-get upgrade
美化命令行 (可选)
bash
sudo apt install zsh git curl -y
sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"
# 更换主题
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
vim ~/.zshrc
# 在~/.zshrc文件中,将主题设置为 powerlevel10k/powerlevel10k
ZSH_THEME="powerlevel10k/powerlevel10k"
因为这个主题的自由度比较高,因此会需要你进行一系列的选择
安装zsh插件
命令补全插件
ruby
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
命令高亮插件
ruby
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
启用插件
在vim ~/.zshrc
ini
plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)
shell
source ~/.zshrc
将zsh
设置为默认shell
(配置好之后下次打开默认就是 zsh 了,也可以输入zsh
进入 zsh 环境)
bash
chsh -s /bin/zsh
安装git
csharp
sudo apt install git -y
# 启用大小写敏感
git config --global core.ignorecase false
# 配置用户名和密码
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
# 生成 ssh key
# 用 Github 的话,可以拷贝生成的公钥到 https://github.com/settings/keys
ssh-keygen
新增用户
sudo adduser username
username
替换为你想创建的用户名
该命令将提示你输入并确认新用户的密码,并提供一些可选的用户信息(如全名、房间号等)。你可以直接按 Enter 跳过这些可选项。
为新用户赋予管理员权限(可选)
shell
sudo usermod -aG sudo username
# 这里是新建用户组,并将用户加入docker用户组。
# 因为: Docker 守护进程的 Unix 套接字文件 `/var/run/docker.sock`,
# 默认仅允许 `root` 用户或 `docker` 用户组成员操作,后续我需要使用该用户操作docker,
# 因此,我需要将该用户添加到docker用户组
sudo groupadd docker
sudo usermod -aG docker username
# 重新加载用户组权限(需重新登录或执行以下命令)
newgrp docker
# 查看当前用户所属组是否包含 docker
groups
这样,新用户将能够使用 sudo
命令来执行需要管理员权限的操作。
切换到新用户:
su - username
修改发行版位置,避免C盘空间被占用
shell
# 停止发行版运行
wsl --terminate Ubuntu-24.04
# 查看发行版运行状态
wsl -l -v
# 导出指定发行版
wsl --export Ubuntu-24.04 D:\wsl2\bak\Ubuntu-24.tar
# 注销发行版运行
wsl --unregister Ubuntu-24.04
# 查看是否注销成功
wsl -l -v
# 重新导入发行版
wsl --import Ubuntu-2404 D:\wsl2\Ubuntu-24 D:\wsl2\bak\Ubuntu-24.tar
# 重新运行发行版
wsl -d Ubuntu-2404
永久修改发行版的默认登录用户
bash
# 进入发行版,查看是否存在该用户
cat /etc/passwd | grep xxx
sudo vim /etc/wsl.conf
# 加入如下内容
[user]
default = <用户名>
退出重启linux发行版
bash
# 退出(这个在linux命令行执行)
logout
# 关闭特定发行版(这个在win命令行执行)
wsl --terminate Ubuntu-2404
# 重启
wsl -d Ubuntu-2404
ubuntu安装docker
将当前用户授予管理员权限
查看当前用户是否有管理员权限
bash
groups
若输出中包含 sudo
或 admin
组,则用户拥有管理员权限
测试是否真的有 sudo 权限
sudo -l
- 若显示
(ALL : ALL) ALL
或类似内容,表示用户拥有完整 sudo 权限 - 若提示输入密码后成功执行命令,则用户具有临时管理员权限
如果没有sudo权限,则将当前用户添加到sudo
组
xml
sudo usermod -aG <组名> <用户名>
卸载docker
shell
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
bash
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
安装docker
安装需要的依赖包
matlab
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
添加阿里云的Docker CE仓库的GPG密钥
arduino
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
添加阿里云的仓库
bash
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
再次更新软件源
sql
sudo apt update
sudo apt upgrade
安装Docker
csharp
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 查看docker版本
docker --version
配置国内的镜像加速源
bash
sudo vim /etc/docker/daemon.json
json
{
"registry-mirrors": [
"https://mirror.baidubce.com",
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://b9pmyelo.mirror.aliyuncs.com",
"https://gmbtuhv4.mirror.aliyuncs.com",
"https://docker.nju.edu.cn"
]
}
加载配置文件并重启
shell
# 查看运行状态
sudo systemctl status docker.service
# 重新加载配置文件
sudo systemctl reload docker
# 查看docker配置信息是否更新成功
sudo docker info
# 重启
sudo systemctl restart docker
# 查看运行状态
sudo systemctl status docker.service
bash
# 启动docker
sudo systemctl start docker
# 停止docker运行
sudo systemctl stop docker
sudo systemctl stop docker.socket
# 查看docker运行状态
sudo systemctl status docker.service docker.socket
运行测试容器
shell
sudo docker run hello-world
docker run 命令的参数
后台运行
docker run -d -p 8080:80 nginx
-d: 就表示后台运行
设置容器名称
docker run -d -p 8080:80 --name web nginx
--name web
:将容器名称设置成了web
挂载数据卷实现动态配置
适用场景:需持久化配置或频繁修改,且需配置与容器解耦。适合开发调试环境
操作步骤:
- 启动容器时挂载宿主机目录
javascript
docker run -d -v /宿主机/配置目录:/容器/配置目录 <镜像名>
- 在宿主机直接编辑配置文件
bash
vi /宿主机/配置目录/config.conf # 修改后自动同步至容器
- 触发容器内服务重载配置(无需重启容器)
bash
docker exec <容器名> nginx -s reload # 例如 Nginx 重载配置
启动容器时指定网络
docker run --network my_custom_network -d nginx
端口映射
- 映射单个端口:
docker run -d -p 8080:80 nginx
- 映射多个端口:
docker run -d -p 8080:80 -p 8443:443 nginx
- 动态端口映射(Docker自动分配宿主机端口而不是手动指定):
docker run -d -P nginx
arduino
docker run -d -p 0.0.0.0:8080:80 --name my_nginx nginx
docker常用命令
- 查看docker版本:
docker --version
- 列出所有本地镜像:
sudo docker image ls
- 列出所有使用中的容器:
sudo docker container ls
- 列出所有本地容器:
sudo docker ps -a
- 删除指定容器:
docker rm id/名称
- 删除所有容器:
docker rm $(docker ps -a -q)
- 删除所有镜像:
docker rmi $(docker images -q)
- 删除指定镜像(如果镜像被引用会删除失败):
docker rmi id/名称
- 查看容器详细信息:
docker inspect <容器名称或 ID>
- 清理所有未使用资源(包括镜像、容器、网络和构建缓存):
docker system prune
- 查看容器的ip地址:
sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器id>
- 查看容器端口映射:
sudo docker inspect -f '{{json .NetworkSettings.Ports}}' <container_id>
- 查看docker的所有网络:
sudo docker network ls
- 查看docker网络的详细信息:
sudo docker network inspect <网络id>
- 创建自定义网络:
docker network create my_custom_network
- 在容器外执行容器内命令(这里的
5ca578c91df9
是容器id,nginx -v
是容器内部命令):sudo docker exec 5ca578c91df9 nginx -v
- 进入运行中的容器的终端:
docker exec -it <容器名或ID> /bin/bash
- 重启容器:
docker restart <容器名>
- 将宿主机文件复制到容器:
docker cp <宿主机路径> <容器名>:<容器内文件路径>
- 将容器中文件复制到宿主机:
docker cp <容器名>:<容器内文件路径> <宿主机路径>
- 恢复已停止容器的运行:
docker start <容器名或ID>
- docker整个重启:
sudo systemctl restart docker
让局域网用户,通过win11的ip访问wsl2中ubuntu中docker容器的服务
通过镜像网络实现
%UserProfile%\.wslconfig
ini
[wsl2]
networkingMode=mirrored # 启用镜像网络模式,使 WSL2 与 Windows 共享网络
dnsTunneling=true # 启用 DNS 隧道,提高与 VPN 等复杂网络的兼容性
autoProxy=true # 同步 Windows 的代理设置到 WSL2
firewall=true # 启用 Windows 防火墙集成
[experimental]
autoMemoryReclaim=gradual
sparseVhd=true
hostAddressLoopback=true # 允许通过主机的局域网 IP 访问 WSL2 中的服务
wsl --shutdown
验证镜像网络模式
在 WSL2 中运行以下命令查看 IP 地址
ip addr
如果 IP 地址与 Windows 主机的 IP 地址一致,说明镜像网络模式已启用。
让win11能够在仅安装docker cli
的情况下,操作远程docker
进入远程服务器,查看远程服务器上的docker版本
我们这里的远程服务器就是指wsl2中的ubuntu
docker version
可以看到我们的docker版本是: 28.0.1
yaml
Client: Docker Engine - Community
Version: 28.0.1
API version: 1.48
Go version: go1.23.6
Git commit: 068a01e
Built: Wed Feb 26 10:41:12 2025
OS/Arch: linux/amd64
Context: default
下载docker命令行工具
在 这里下载 docker 命令行工具,选择对应版本即可
若是无法打开上面的网址,那就按照这个格式拼接下载地址,再通过迅雷下载
download.docker.com/win/static/...
将压缩包解压,并将文件放入一个文件夹,如: d:\app\docker-cli-28.0.1
文件夹
在 这里下载 docker-compose 命令行工具
若是无法打开上面的网址,那就按照这个格式拼接下载地址,再通过迅雷下载
同样将docker-compose-windows-x86_64.exe
重名为docker-compose.exe
文件后,放入,如: d:\app\docker-cli-28.0.1
文件夹
找到 docker.service
文件位置
find -name "docker.service"
bash
./multi-user.target.wants/docker.service
编辑docker.service
文件
找到如下内容,并注释掉
ruby
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
替换为, 增加如下内容
ruby
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启docker服务
sudo systemctl daemon-reload && systemctl restart docker
在你本地通过浏览器访问http://{服务器IP}:2375/version
, 当看到页面显示一串JSON时表示已开放远程访问。
访问wsl2中的docker则是: http://localhost:2375/version
, 当看到页面显示一串JSON时表示已开放远程访问。
json
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"28.0.1","Details":{"ApiVersion":"1.48","Arch":"amd64","BuildTime":"2025-02-26T10:41:12.000000000+00:00","Experimental":"false","GitCommit":"bbd0a17","GoVersion":"go1.23.6","KernelVersion":"5.15.167.4-microsoft-standard-WSL2","MinAPIVersion":"1.24","Os":"linux"}},{"Name":"containerd","Version":"1.7.25","Details":{"GitCommit":"bcc810d6b9066471b0b6fa75f557a15a1cbf31bb"}},{"Name":"runc","Version":"1.2.4","Details":{"GitCommit":"v1.2.4-0-g6c52b3f"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"28.0.1","ApiVersion":"1.48","MinAPIVersion":"1.24","GitCommit":"bbd0a17","GoVersion":"go1.23.6","Os":"linux","Arch":"amd64","KernelVersion":"5.15.167.4-microsoft-standard-WSL2","BuildTime":"2025-02-26T10:41:12.000000000+00:00"}
配置win环境变量
makefile
DOCKER_HOST: tcp://localhost:2375
DOCKER_CLIENT: D:\app\docker-cli-28.0.1
并将:DOCKER_HOST
设置到 PATH
环境变量中,使得在所有地方,都可以调用docker-cli
的命令
%DOCKER_CLIENT%
查看path环境变量中是否包含D:\app\docker-cli-28.0.1
这个路径
bash
# powershell 中查看path环境变量值
$env:Path
# cmd 中查看path环境变量值
echo %PATH%
验证是否成功
打开windows的CMD
,在任意文件夹下执行docker ps
查看是否显示服务器上的容器。
打开windows的CMD
,在任意文件夹下执行docker-compose version
看是否有效
在ubuntu中,基于nexus3搭建私服
安装jdk 8
sudo apt install -y wget openjdk-8-jdk unzip
java -version
解压与安装服务
tar -zxvf nexus-3.70.1-02-java8-unix.tar.gz
bash
# 必须保持这个目录结构
sudo mv nexus-3.* /opt/nexus
# 必须保持这个目录结构
sudo mv sonatype-work /opt/sonatype-work
编辑 Nexus 启动文件,设置非 root 用户运行
bash
sudo nano /opt/nexus/bin/nexus.rc
不一定要设置为nexus
, 只要是非root用户即可
ini
run_as_user="nexus"
配置 Nexus 服务
bash
sudo nano /etc/systemd/system/nexus.service
ini
[Unit]
Description=Nexus Repository Manager
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
# 用户必须与 /opt/nexus/bin/nexus.rc 中配置的一至
User=nexus
# 用户组必须是 /opt/nexus/bin/nexus.rc 中配置的用户,所在的用户组
Group=nexus
# 这里的nexus启动文件地址一定要写正确(这里只是示例)
ExecStart=/opt/nexus/bin/nexus start
# 这里的nexus启动文件地址一定要写正确(这里只是示例)
ExecStop=/opt/nexus/bin/nexus stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
启动并启用 Nexus 服务
重新加载 Systemd 配置:
sudo systemctl daemon-reload
启动 Nexus 服务:
sql
sudo systemctl start nexus
设置开机启动:
bash
sudo systemctl enable nexus
检查服务状态:
lua
sudo systemctl status nexus
访问 Nexus Web 界面
arduino
http://<你的服务器IP>:8081
首次登录时:
- 默认用户名:
admin
- 默认密码:在
/opt/sonatype-work/nexus3/admin.password
文件中。
查看密码命令:
bash
cat /opt/sonatype-work/nexus3/admin.password
限制nexus内存占用
bash
sudo nano /opt/nexus/bin/nexus.vmoptions
ini
-Xms1G # 设置 JVM 最小内存为 1GB
-Xmx1G # 设置 JVM 最大内存为 1GB
-XX:MaxDirectMemorySize=1G # 设置直接内存为 1GB
重启nexus服务
sudo systemctl restart nexus
查看 Nexus 的内存使用情况
perl
ps aux | grep nexus
通过Nexus搭建Npm私库
【Nexus】通过Nexus搭建Npm私库_nexus npm-hosted-CSDN博客
通过nexus搭建docker私服
Nexus3中搭建Docker私服_如何通过nexus代理拉取外部镜像源-CSDN博客
参考资料
windows10(家庭版)和windows11(家庭版)开启WSL2_启动wsl-CSDN博客
Ubuntu24.04换源方法(新版源更换方式,包含Arm64)-CSDN博客
全网最全Win10/11系统下WSL2+Ubuntu20.04的全流程安装指南(两种支持安装至 D 盘方式)_win10 wsl2安装-CSDN博客
windows11 安装WSL2全流程_wsl2安装-CSDN博客
WSL2 搭建 Windows 更好用的前端开发环境 | Arthur Wang
zsh 安装与配置,使用 oh-my-zsh 美化终端 | Leehow的小站
Ubuntu 24.04.1 LTS 安装Docker 丝滑!!!_ubuntu 24.04.1安装docker-CSDN博客
在 Windows 11 中设置 WSL2 Ubuntu 的 networkingMode=mirrored
详细教程-CSDN博客
Windows远程连接Docker服务_docker运行windows镜像 如何远程访问-CSDN博客