在部署了N个docker服务后,我的极空间Z4CPU性能终于是被榨的一点不剩了,还想继续折腾怎么办,一是升级新款Z423,看了眼价格还是算了;二是服务和存储分开,搞个专门的服务器用来部署服务,NAS回归到它原本的定位上只用来做网络存储,刚好有台闲置的Windows笔记本搞起!
Windows 11 docker安装和使用
安装docker
安装流程可以参考官方文档, 安装完wsl里会多出两个docker的linux分发版,如过自己没有用wsl安装过分发版,后续拉取镜像启动镜像都会基于这两个分发版,默认是arm架构的,有些镜像可能没有支持arm架构芯片,所以我又用wsl安装了Ubuntu。
C:\Users\vector> wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
wsl需要访问github可能需要代理或者绑定host,安装完后在docker设置里打开

打开后进入Linux命令行就可以直接使用docker了,在命令行拉取启动镜像,windows下docker管理界面会同步更新。
C:\Users\vector> wsl
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
This message is shown once a day. To disable it please create the
/home/vector/.hushlogin file.
vector@DESKTOP-62URPQ2:/mnt/c/Users/vector$ docker --version
Docker version 25.0.1, build 29cf629
挂载smb
这里安装ubuntu还有一个原因:默认的那两个docker分发版不支持挂载远程smb。ubuntu下执行下面两条命令用来安装挂载smb相关的依赖:
sudo apt update
sudo apt-get install smbclient cifs-utils
执行以下命令进行挂载,挂载时需要指定权限,不然会导致只有root用户有写权限,其他用户包括docker服务都没有写权限:
mkdir /mnt/zkj // 创建挂载目录
sudo mount.cifs //192.168.1.4/nvme2-1XXXXXXXXX7/docker /mnt/zkj -o username=1XXXXXXXXX7,password="xxxxxx",uid=1000,gid=1000,iocharset=utf8,rw,dir_mode=0777,file_mode=0777 //执行挂载
挂载完后就可以正常映射目录到docker镜像里了,比如启动的wikijs的镜像,这样服务运行在windows服务器上, 存储在局域网下的NAS上
docker run -d -p 3080:3000 --name wiki --restart unless-stopped -v /mnt/zkj/docker/wikijs/data/db:/wiki/data/db -v /mnt/zkj/docker/wikijs/data/content:/wiki/data/content -e "DB_TYPE=sqlite" -e "DB_FILEPATH=/wiki/data/db/db-back.sqlite" requarks/wiki:latest
权限问题
上面wsl下的Linux直接挂载smb会有个文件权限问题,导致sqlite无法使用,就上面那个例子容器启动会一直报[SQLITE_BUSY] The database file is locked,解决办法是使用Widows的文件系统
- 在windows下先挂载smb

- 映射到磁盘
右键此电脑唤出菜单,点击将刚挂载的smb映射到磁盘上


映射为windows磁盘后,在wsl ubuntu里挂载这个磁盘
mkdir /mnt/e
sudo mount -t drvfs E: /mnt/e
启动后自动挂载:编辑sudo vi /etc/fstab添加一行下面的内容
E: /mnt/e drvfs defaults 0 0
使用新的目录映射启动容器就可以了,如果没有识别到挂载的目录,可以重启下windows下的docker服务
docker run -d -p 3080:3000 --name wiki --restart unless-stopped -v /mnt/e/wikijs/data/db:/wiki/data/db -v /mnt/e/wikijs/data/content:/wiki/data/content -e "DB_TYPE=sqlite" -e "DB_FILEPATH=/wiki/data/db/db-back.sqlite" requarks/wiki:latest
总结
如果NAS性能跟得上,完全可以都在NAS上搞,不过这种性能的NAS也就不是传统意义的上的NAS了,更像是定制化的服务器。如过NAS性能不足又不想花钱搞升级可以整个单独的服务器,使用闲置的笔记本或者mini主机跟NAS组个局域网。