Windows安装Linux子系统和1Panel面板做容器平台和开发环境

1Panel 

之前我一直是用官方版的Docker Desktop for Windows当作本地服务用的,但是Docker Hub有时候代理就挺烦的。最近重装了系统所以研究一下替代。

 

配置Windows功能

启用Linux子系统(WSL)的方法,任务栏搜索 -> 控制面板 -> 程序 -> 启用或关闭 Windows 功能:勾选 子系统、虚拟机平台支持 这两项即可。

这个教程很多,就跳过了。

因为这样安装WSL后版本是WSL1,然后我们需要更新WSL内核到WSL2。

如果之前已经安装过或者不确定WSL当前运行的默认版本的,可以下载安装一下  Linux 内核更新包 ,或者在 Github上 下载最新的WSL Release。

需要WSL2的原因是1Panel需要systemd命令支持,这个其实官方Docker也需要,所以Docker官方的教程里也有这一步。

然后我们需要安装Ubuntu 24.04,在Microsoft Store中搜索即可,WSL提供的Ubuntu是两年一个LTS大版本,上一个版本 22.04 也行,或者你想安装Debian也行。

PS:因为Microsoft Store提供的Debian版本很老了,需要自己Update到最新,所以也不是很推荐用。

然后启动下载的Ubuntu,会弹出来一个终端,按照提示配置用户名和密码,后面就和普通安装完成的Ubuntu一样用了。

 

或者更简单点,直接在PowerShell中以管理员身份运行:wsl --installl -d Ubuntu-24.04,就可以完成上述步骤。

如果之前就安装过WSL,可以运行一下:wsl --version查看当前版本,如果提示“命令行选项无效: --version”,那就说明你的WSL版本一定是过低的。

升级版本,按上面的Github下载最新版本或者直接运行wsl --update应该都可以。

对于以上更详细的说明可以去看Windows官方的WSL帮助文档

安装1Panel

首先我们要启用Ubuntu的root账号,设置root账号的密码:

sudo passwd root

然后切换到root账号

su root

输入刚才的密码,这时命令行提示符从$变为#就是切换成功了。

自己用这么整是无所谓的,因为root账号可以跳过sudo并且避免一些出错,但是生产环境就不建议了。

然后和平常使用Ubuntu或者Debian时候一样,我们需要给系统换一下更新源,这个就不细说了。

可以看阿里云镜像站的使用帮助,或者TUNA镜像站的使用帮助

剩下的事就简单了,直接运行1Panel的一键部署脚本即可:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

一些可能的坑

  • 如果之前安装过Docker Desktop的话可能需要完全卸载子系统然后重新安装,因为按照Docker官方文档的说法Docker Desktop使用的命令跟Linux下是有一些不同的,所以Docker Desktop创建的WSL系统应该也不适用于原装Linux。
  • 关于systemctl命令的一些坑,如果运行时候还是报错“System has not been booted with systemd as init system (PID 1).”之类的,建议在PowerShell中调用wsl命令看一下默认版本,如果不是运行在wsl2就需要按照上面说的更新操作一下。
  • 和其他hyper-v/vmware虚拟机一样,主机上不要开任何代理程序之类的,会导致虚拟网卡被一起劫持走,然后系统内就会update失败。

以及一些其他操作

之所以想用WSL主要是WSL有些地方还是很方便的,比如Windows 可以和 WSL 文件相互访问。

WSL系统部署完之后会在资源管理器里创建一个名字为Linux的库,里面直接映射了Linux系统文件,然后,Windows的盘符均挂在Linux的/mnt目录下,可以直接访问。

有一个地方需要注意,Windows下请勿修改WSL的文件,由于Linux的文件是必须要filesystem等属性字段的,windows并不会创建这些字段,如果直接修改经常会造成权限错误,如果一定要这么干的话务必记得chmod一下,或者直接从WSL内读取需要拷贝的文件。


WLS是可以运行在其他盘符的(只是启动时候会报错,但是不影响用)。

因为WSL的系统默认创建在C盘,我C盘还蛮大的倒是不存在飘红的问题,但是应该有人会需要。

如何迁移WSL的文件:

  1. 首先 wsl -l -v 然后复制一下系统实例的名字。
  2. 然后运行 wsl --export 导出一个实例备份,--export 需要指定[实例名] [tar文件保存路径]
  3. 然后注销实例 wsl --unregister [实例名] ,然后这个系统就会从硬盘上删除
  4. 接下来恢复备份,使用 wsl --import [实例名] [实例运行的目录] [tar文件保存路径] --version 2 ,然后给恢复后的系统设为默认子系统 wsl --setdefault [实例名]
  5. 最后启动实例 wsl -d [实例名]
  6. 这部分命令可以从 wsl --help 查看参数,就不细说了。

因为WSL直接使用Windows的端口,所以你会发现WSL内运行的容器是可以直接从127.0.0.1(localhost)访问的。

然后这就带来一个问题,因为Windows 10内置的SSH Server服务会占用22端口,所以使用SSH是无法连接到WSL的,使用172的本机内网IP也不行。

这时只需要在WSL内修改一下SSH的监听端口,

Ubuntu的SSH配置默认在/etc/ssh/sshd_config,里面有一行被注释的参数“#Port 22”,取消注释然后改成其他端口号即可。


最后是如何让WSL常驻后台,因为WSL的设计是这样的,WSL启动时会发起一个终端,然后我们如果把WSL的终端会话全部关闭的话,WSL的进程也会一起强制停止。这个事情其实社区上从2022年之前就已经吵着要给WSL加一个“始终保持运行状态”的选项了,但是巨硬嘛当然是巨硬了。

想让WSL开机自启然后运行在后台的话,比较简单的办法是直接在powershell里通过--WindowStyle Hidden命令创建一个bash进程或者wsl进程然后给它添加到自启动里,当然,这样可能不是很好用,所以我推荐个别的大佬写的vbs脚本自启动的方法:让WSL开机启动,后台运行,以减少唤醒时间 - wswind - 博客园 (cnblogs.com)

THE END
夜华子酱我知道你很急,但你先别急