Docker 入门:用数据卷把容器里的数据留下来
刚接触 Docker 的新手常常会遇到一个困惑:容器里明明已经写好了数据、装好了配置,可容器一删,这些东西就全没了。这不是 Docker 出了问题,而是容器的设计本来就是这样:容器层是临时的,删容器就等于把这一层连同里面的改动一起扔掉。想要数据留下来,办法就是数据卷——把容器里的数据,存到容器之外的地方。
先理解一个比喻。容器像一间临时办公室,你在里面写的文件都放在办公桌上;人一走、办公室一拆,桌上的东西自然就没了。数据卷像你随身带的文件柜,办公室可以换,但文件柜一直跟着你。把容器里的目录挂到数据卷上,数据就写进了文件柜,而不是临时办公室,容器删了重建,文件柜还在,数据自然还在。
数据卷有两种常用形态。第一种是具名卷,由 Docker 自己管理,你只要给它起个名字,比如 mydata,Docker 会在自己的存储区里维护它,用起来最省心,适合数据库、缓存这类不需要你直接翻文件的数据。第二种是绑定挂载,把你电脑上一个真实目录直接挂进容器,比如把当前目录下的 data 文件夹挂到容器里的 /app/data,这样你可以在主机上直接看到、编辑、备份这些文件,适合开发调试。两种没有绝对的好坏,省心选具名卷,要看得见、摸得着选绑定挂载。
动手之前先记住三个命令。创建并查看卷用 docker volume create 和 docker volume ls,前者新建一个卷,后者列出本机已有的卷;运行容器时用 -v 把卷挂进去,例如把 mydata 挂到容器里的 /data;清理不再用的卷用 docker volume prune,但这条命令会删掉所有未被使用的卷,执行前一定要确认没有误删重要数据。新手最容易在这里吃亏:随手清理,却发现某个早就不记得的数据库卷也被清掉了。
一个最典型的练习是跑数据库。直接跑数据库容器,往里面写几条数据,然后删掉容器、再用同一个卷重新跑一个同名数据库容器,你会发现数据还在。这一步走通了,数据卷的概念就真正落地了。反过来,如果不挂卷就删容器,数据丢了也不要惊讶,那正是容器临时性的正常表现。做这个练习时建议用测试数据,不要拿真实业务数据练手。
还有三条新手容易踩的坑。第一,挂载路径写错:容器里的路径和主机上的路径左右不要颠倒,写反了数据会写到意想不到的地方。第二,以为挂了卷就万事大吉,却忘了备份:卷只是把数据留在了主机上,主机硬盘坏了、误删了,数据一样会丢,重要数据还是要定期备份到别处。第三,在多个容器之间共享同一个卷时,两个容器同时写同一个文件可能互相覆盖,共享之前先想清楚谁负责写、谁只负责读。
给新手的建议是:从具名卷开始,跑通“删容器、数据还在”这一圈,再去试绑定挂载;每一次删容器前,先用 docker volume ls 确认卷还在;每一次清理前,先想一遍这个卷里有没有还没备份的东西。养成这个习惯之后,容器就不再是“用完就丢”的消耗品,而是一个可以反复重建、数据始终安稳的工作方式。
今天可以练一次:新建一个具名卷,跑一个会写文件的容器,写点内容后删掉容器,再用同一个卷重建,验证文件还在。走完这一圈,“容器删了数据就没了”就不再是困惑,而是一个你已经亲手解决过的问题。
- 点赞
- 收藏
- 关注作者
评论(0)