优化 文件系统 The container’s filesystem 卷 volumes 命名卷

注意~~

卷有多种
本节使用的是叫命名卷(named volumes)的卷
不了解没关系, 但要有印象

首先,了解容器文件系统

  • 是由不同的镜像文件层层叠加而成的
  • 有个叫“the scratch space”的暂存空间专门用来处理增删改查
  • 修改当前容器中的镜像不会对另一个容器中的相同镜像造成影响

    实践

    docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
    image.png

    cat /data.txt 查看文本内容
    image.png

命令行方式查看image.png

image.png
因为所有修改在第一个的the scratch space, 不会干扰到第二个

使用docker rm -f 容器ID命令删除第一个容器

接着,卷(volumes)📎

简言之, 就是docker官方把数据库的内容放到了容器的主机上, 从而实现了数据持久化.(详细介绍点击回形针查看官方说明,为了避免二次传播带来的信息损失)

默认的 Docker 引擎安装支持两种主要类型的卷, 命名卷和绑定挂载

①创建卷

image.png

②停止并删除

停止并删除正在运行的todo容器,因为它没有与新建的卷相关联

tip: 遇到迷惑的中文翻译, 就先查看词典吧, 看看它的其它翻译 mount常被翻译为挂载, 这种很像专业术语的词迷惑了我很久, 并试图且费时通过百度搞懂这个词语, 如今想起来我应该直接查询单词书这个词的其他翻译的[哭泣], 了解其他翻译之后我立刻明白了这个挂载所要执行的操作了 日常更常见的更容易理解的应该是安装/挂接 这边我翻译成关联, 是我个人更喜欢这个翻译

docker rm -f <id> 或者 可视化面板

③重新运行并关联卷

docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

④随意添加todo

image.png

⑤现在停止运行并删除这个容器

⑥重新运行一个新的容器

会发现数据被保留了

⑦Hooray!到此我们就完成了数据持久化