Docker AUFS如何持久保存数据?

问题描述 投票:1回答:1

我对docker AUFS如何持久保存数据有些怀疑。据我所知,VOLUME中的数据可以是持久的,而其他位置则不能。这里做了一个例子,拉一个qqlxswpoi的mysql容器,然后执行以下步骤:

  1. dockerfile目录下创建一个test目录,该目录不应该在docker容器中持久化
  2. 登录mysql并创建一个数据库,让/opt目录添加一个额外的文件
  3. 停止这样的容器并重新开始
  4. 提交此类容器,然后删除容器
  5. 启动已提交的容器并检查数据库是否仍然存在

结果

  • 在第3步之后,所有都存在于容器内,包括/var/lib/mysql目录,我认为不应该在test中保留。所以我是否都知道docker aufs是错的?
  • 在第5步之后,我可以看到新容器中不存在数据库,但为什么呢?不应该在AUFS内部存档吗?

这是我正在运行的docker命令

/var/lib/mysql

注意:我没有指定docker build -td --name mysql_test mysqlImageId 选项

docker docker-volume
1个回答
1
投票

根据我对docker的理解,我希望您描述的流程步骤得到以下结果:

首先:数据可以保存在docker容器中 - 事实上,容器上创建,删除或更新文件的任何操作都会触发AUFS将该文件写入容器层。对于删除或更新,这将隐藏较低图像层中相同文件的条目。当然,任何写入的数据只会持续到您移除容器为止。如果基于同一图像启动新容器,则此数据自然不存在。

此外,docker build的目的是从Dockerfile构建映像。你不能用它来启动一个容器。

关于你的观察

  • 在第3步之后,我希望您的所有数据仍然存在,因为停止并重新启动容器会使容器层保持不变。停止只会杀死使容器保持活动状态的主进程,并且启动通过执行相关的入口点脚本重新启动主进程。
  • 在第5步之后,我仍然希望您的数据存在,因为您已将容器提交到新图像。此图像现在应包括修改后的容器图层。当您调用docker commit时,请记住,这不是更新原始图像,而是创建一个新图像。
© www.soinside.com 2019 - 2024. All rights reserved.