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

文中内容摘自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驱动器卸载为止。被遮蔽的文件不会被删除或更改,但在装入绑定装入或卷时无法访问。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到Docker学习笔记时,我可以为你提供一些基本的指导和主题,以帮助你开始学习Docker。以下是一些可能涵盖的主题: 1. Docker简介:了解Docker的基本概念、优势以及它如何与虚拟化技术不同。 2. Docker安装:学习如何在不同的操作系统上安装Docker,并熟悉Docker引擎的组成部分。 3. Docker镜像:了解Docker镜像的概念,以及如何通过构建、拉取和推送镜像来管理和共享容器环境。 4. Docker容器:学习如何创建、启动、停止和删除容器,并了解容器和主机之间的交互方式。 5. Docker网络:探索Docker网络模式,包括桥接网络、主机网络和覆盖网络,并理解容器之间以及容器与主机之间的通信方式。 6. Docker存储:了解Docker存储技术,包括数据和绑定挂载,并学习如何在容器持久化数据。 7. Docker Compose:介绍Docker Compose工具,它可以用于定义和运行多个容器的应用程序。 8. Docker Swarm:探索Docker Swarm,它是Docker官方的容器编排和集群管理工具,于在多个主机上部署和管理容器应用。 9. Docker和持续集成/持续部署(CI/CD):了解如何将Docker与CI/CD工具(如Jenkins、GitLab CI等)集成,以简化应用程序的构建和部署过程。 这只是一些可能的主题,你可以根据自己的需求和兴趣来选择学习内容。希望这些指导可以帮助你开始学习Docker!如果你有任何特定的问题,我很乐意回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值