家里装了NAS,手机、电脑的文件都能自动同步,但最近想在路由器上跑个博客,发现数据存哪儿成了问题。这其实和企业里用容器跑应用碰到的情况差不多——容器本身是临时的,重启就清空,数据得有个靠谱的落脚地。
容器为啥存不住数据?
想象一下,你在厨房做菜,锅碗瓢盆都是一次性的,做完一锅就全扔掉,下回还得重新准备。容器就像这个一次性厨房,每次启动都是干净环境。虽然方便,但要是你写的文章、用户注册的信息都存在里面,一重启全没了,显然不行。
挂载目录:最简单的解法
最直接的办法,就是把主机上的一个文件夹“挂”到容器里。比如你在路由器或服务器上建个 /data/blog 目录,启动容器时告诉它:“你的 /app/data 就用这个文件夹”。这样即使容器删了重装,数据还在原地。
docker run -d \
-v /data/blog:/app/data \
--name myblog \
myblog:latest
这种办法适合个人项目,比如你在树莓派上搭了个日记应用,数据量不大,也不怕机器宕机。
网络存储:多台设备共享数据
如果你有多个节点,比如家里客厅和书房各有一台小主机,都想访问同一个数据库,就得靠网络存储。常见的像NFS、iSCSI,或者云厂商提供的云盘,能把一块硬盘通过网络“挂”到多个容器上。
比如你用Kubernetes管理家里的几台设备,可以定义一个PersistentVolume指向NAS上的共享文件夹,再通过PersistentVolumeClaim让容器申请使用。这样一来,不管容器调度到哪台设备,都能读到同样的配置和内容。
apiVersion: v1
kind: PersistentVolume
metadata:
name: blog-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.1.100
path: /exports/blog
选哪种方案?看你要干啥
如果你只是在单台设备上跑个服务,比如监控摄像头录像存本地,用目录挂载最省事。但要是想搞高可用,比如一台设备坏了另一台立刻顶上,那就得上网络存储,确保数据随时可访问。
还有一种情况:你开发的应用本身支持外部数据库,比如把数据存进MySQL或MongoDB,而数据库单独部署并做了备份,那容器里根本不用存数据,轻装上阵反而更稳。
别忘了备份
再可靠的存储也可能出问题。NAS硬盘老化、网络中断、误删文件……定期把重要数据备份到U盘或云端,就像给照片多存一份在手机和电脑上,心里才踏实。