gpt4 book ai didi

docker - Docker AUFS如何持久化数据?

转载 作者:行者123 更新时间:2023-12-02 19:30:07 26 4
gpt4 key购买 nike

我对docker AUFS如何持久化数据存在一些疑问。据我了解, VOLUME 内部的数据可以持久保存,而其他位置则不能。这里举个例子,将一个mysql容器拉到dockerfile并执行以下步骤:

  • test目录下创建一个/opt目录,该目录不应在docker容器
  • 中持久存在
  • 登录mysql并创建一个数据库,因此/var/lib/mysql目录添加了一个附加文件
  • 停止该容器,然后再次启动
  • 提交这样的容器,然后删除容器
  • 启动已提交的容器,并检查数据库是否仍退出

  • 结果
  • 步骤3之后,所有内容都存在于容器中,包括test目录
    我认为不应该将其保留在AUFS中。那么,我对docker aufs的了解是否是错误的?
  • 步骤5之后,我可以看到新容器中不存在数据库,但是为什么呢?不应该在/var/lib/mysql中保留文件吗?

  • 这是我正在运行的docker命令
    docker build -td --name mysql_test mysqlImageId

    注意:我没有指定 -v选项

    最佳答案

    根据我对docker的了解,我期望您所描述的过程步骤会带来以下结果:

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

    此外,的docker build的目的是从Dockerfile生成镜像。您不能使用它来启动容器。

    关于你的观察

  • 在第3步之后,我希望您的所有数据仍然存在,因为停止和重新启动容器会使容器层保持不变。停止只是杀死使您的容器保持 Activity 状态的主进程,而启动通过执行相关的入口点脚本来重新点燃主进程。
  • 在第5步之后,我仍然希望您的数据在那里,因为您已将容器提交到新图像。现在,该图像应包括修改后的容器层。当您调用docker commit时,请记住这不是在更新原始镜像,而是创建一个新镜像。
  • 关于docker - Docker AUFS如何持久化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242879/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com