作者:wow2333
在部署了N个docker服务后,我的极空间Z4CPU性能终于是被榨的一点不剩了,还想继续折腾怎么办,一是升级新款Z423,看了眼价格还是算了;二是服务和存储分开,搞个专门的服务器用来部署服务,NAS回归到它原本的定位上只用来做网络存储,刚好有台闲置的Windows笔记本搞起!
Windows 11 docker安装和使用
安装docker
安装流程可以参考官方文档, 安装完wsl里会多出两个docker的linux分发版,如过自己没有用wsl安装过分发版,后续拉取镜像启动镜像都会基于这两个分发版,默认是arm架构的,有些镜像可能没有支持arm架构芯片,所以我又用wsl安装了Ubuntu。
C:Usersvector> 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:Usersvector> wsl
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64)
vector@DESKTOP-62URPQ2:/mnt/c/Users/vector$ docker --versionDocker 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组个局域网。
参考
https://github.com/microsoft/WSL/issues/4689
https://github.com/sqlitebrowser/sqlitebrowser/issues/2142
WSL 上的 Docker 容器入门 | Microsoft Learn
wsL2中挂载windows下的网络硬盘 | madgds blog
阅读更多网络存储精彩内容,可前往什么值得买查看