docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker容器数据持久化

Docker中的容器数据持久化问题

作者:五星上炕

本文介绍了Docker容器中数据持久化的方法,包括默认的可读写层、volumes、bindmounts和tmpfs,volumes是官方推荐的持久化方案,而bindmount和tmpfs则适用于不同的场景,在使用mount类型时,需要注意一些细节,如挂载空volume、bindmount非空目录等

Docker容器数据持久化

参考:https://docs.docker.com/storage/

默认情况下,container内部新创建文件或者修改文件,结果会保存在container的可读写层中,这意味着:

如果打算将数据持久化在宿主机的文件系统中,docker提供至少两个选项:volumes与bind mounts,如果docker运行在Linux操作系统中,还可以使用tmpfs .mount。

选择正确的mount类型

无论你选择那种mount类型,从container内部看没有区别,它们都是目录或者文件。数据都是寄存在宿主机上,只不过具体位置有所区别,如下:

有关挂载类型的更多详细信息

volumes:由docker负责创建、管理。用户可以显式的调用命令docker volume create创建volume,也可以通过container、service的启动隐式创建。

bind mount:本质上是宿主机、container之间共享宿主机文件系统。这种持久化方法更导致container与宿主机的耦合过于紧密,所以不推荐使用。

tmpfs mount:有特定的应用场景。比如docker可将用户名与密码等敏感数据保存在某个数据库中,当启动需要访问这些敏感数据的container或者service时,docker会在宿主机上创建一个tmpfs,然后将敏感数据从数据库读出写到tmpfs中,再将tmpfs mount到container中,安样能保证数据安全。当容器停止运行时,则相应的tmpfs也从系统中删除。

在创建容器时,bind mount与volume两种方式使用的选项相同,都是-v或者--volume,而实际上在语法上有明显的区别。tmpfs通过--tmpfs选项实现。总之在旧版本的docker中,这一块的语法有点混乱,从docker17.0.6开始,推荐使用新选项--mount,它要清晰的多。

volume适用场景

bind mount适用场景

使用bind mount与volume的提示

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文