Docker学习笔记(六)数据存储

本文深入探讨Docker中数据持久化的三种主要方式:卷、绑定挂载和tmpfs挂载。卷作为首选方法,适合多容器间共享数据,支持远程存储。绑定挂载适用于配置文件共享和开发环境。tmpfs挂载则用于临时数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文中内容摘自Docker官网

提醒:请务必使用root帐号,以免在后面应用系统部署时,发生权限问题。

    默认情况下,保存在Docker的数据会随着Docker的关闭而消失。Docker提供三种模式可以将数据持久化:卷(Volume)、绑定挂载(bind mount)、tmpfs挂载(tmpfs mount)。

types of mounts and where they live on the Docker host

保存在Docker管理的主机文件系统中 (Linux默认路径在 /var/lib/docker/volumes/),非Docker进程不能修改这部分文件系统。卷是在Docker下最佳持久化方式。

    卷由Docker创建和管理。可以使用 docker volume create 命令显式创建卷,或者在创建容器或服务期间创建卷。

    创建卷时,它存储在Docker主机上的目录中。当将卷装入容器时,这个目录就是装入容器的目录。这与绑定装载的工作方式类似,只是卷由Docker管理,并且与主机的核心功能隔离。

    给定的卷可以同时装入多个容器中。当没有正在运行的容器使用卷时,该卷仍可用于Docker,不会自动删除。可以使用 docker volume prune 删除未使用的卷。

    装载卷时,它可以是命名的或匿名的。当匿名卷第一次装入容器时,Docker会给它们一个随机的名称,保证在给定的Docker主机中是唯一的。除了名称之外,命名卷和匿名卷的行为也相同。

    卷还支持卷驱动程序的使用,它允许您将数据存储在远程主机或云提供商上,以及其他可能性。

绑定挂载 可以保存在主机系统的任何路径下。非Docker进程可以在任何时候访问这些数据。

    早期提供的方案。如果您正在开发新的Docker应用程序,请考虑改用命名卷。不能使用 docker cli 命令直接管理绑定装载。使用绑定装载时,将主机上的文件或目录将装载到容器中。如果该文件或目录不存在,则自动创建。绑定挂载的性能非常好,但它们依赖于主机的文件系统。

tmpfs挂载 保存在内存中,它可以依附于主机或某个容器。

绑定挂载和卷都可以使用 -v 或 --volume 参数,只是语法上稍有不同,使用 --tmpfs 可以实现tmpfs挂载。Docker 17.06及以上版本,我们建议使用 --mount 参数,在容器和服务上实现绑定挂载和卷、tmpfs挂载,语法会更加简洁。

优势

 

    卷是在Docker容器和服务中保存数据的首选方法。卷的一些用例包括:

    1. 在多个正在运行的容器之间共享数据。如果不显式创建卷,则在第一次将卷装入容器时创建卷。当容器停止或移除时,卷仍然存在。多个容器可以同时装载同一个卷,读写或只读。只有在显式删除卷时才删除它们。

    2. 当Docker主机不能保证具有给定的目录或文件结构时。卷帮助您将Docker主机的配置与容器运行时分离。

    3. 当您希望将容器的数据存储在远程主机或云提供程序上,而不是本地时。

    4. 当您需要从一个Docker主机备份、恢复或迁移数据到另一个Docker主机时,卷是更好的选择。您可以停止使用卷的容器,然后备份卷的目录(例如/var/lib/docker/volume s/<volume name>)。

绑定挂载

    一般来说,您应该尽可能使用卷。绑定装载适用于以下类型的用例:

    1. 将配置文件从主机共享到容器。这就是Docker默认情况下通过将/etc/resolv.conf从主机装载到每个容器中为容器提供DNS解析的方式。

    2. 在Docker主机和容器上的开发环境之间共享源代码或构建工件。例如,您可以将maven目标/目录装入容器中,并且每次在Docker主机上构建maven项目时,容器都可以访问重建的工件。

    3. 如果您使用docker进行这种开发,那么您的生产dockerfile将直接将生产就绪的工件复制到映像中,而不是依赖于绑定挂载。

    4. 当docker主机的文件或目录结构保证与bind挂载所需的容器一致时。

tmpfs挂载

    当您不希望数据在主机或容器中持久化时,最好使用tmpfs装载。这可能是出于安全原因,或者在应用程序需要写入大量非持久状态数据时保护容器的性能。

小提示

    如果将空卷装入文件或目录所在容器中的目录中,这些文件或目录将被传播(复制)到卷中。同样,如果启动容器并指定一个不存在的卷,则会为您创建一个空卷。这是预填充另一个容器所需数据的好方法。

    如果将绑定挂载或非空卷挂载容器中的某个目录(其中存在某些文件或目录),这些文件或目录将被装入掩盖,就像将文件保存到Linux主机上的/mnt中,然后将USB驱动器装入 /mnt 一样。/mnt的原有内容将被USB驱动器的内容遮蔽,直到USB驱动器卸载为止。被遮蔽的文件不会被删除或更改,但在装入绑定装入或卷时无法访问。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值