Docker ——Use volumes

官网

在Docker中管理数据

默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着:

  • 当该容器不再存在时,数据将不会持久保存,并且如果另一个进程需要它,则可能很难从容器中取出数据。
  • 容器的可写层与运行容器的主机紧密耦合。您不能轻易地将数据移动到其他地方。
  • 写入容器的可写层需要 存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能 

Docker为容器提供了两个选项来将文件存储在主机中,以便即使容器停止后文件也可以持久存储:volumes, and bind mounts如果您在Linux上运行Docker,则还可以使用tmpfs挂载如果您在Windows上运行Docker,则还可以使用named pipe

 

选择合适的安装座类型

无论您选择使用哪种类型的安装,容器中的数据看起来都是相同的。它在容器的文件系统中显示为目录或单个文件。

可视化volumesbind mountstmpfs 挂载之间差异的一种简单方法是考虑数据在Docker主机上的位置。

挂载的类型以及它们在Docker主机上的位置

  • volumes存储在主机文件系统的一部分中,该文件系统由Docker管理/var/lib/docker/volumes/在Linux上)。非Docker进程不应修改文件系统的这一部分。volumes是在Docker中持久保存数据的最佳方法。

  • bind mounts可以存储在主机系统上的任何位置它们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时对其进行修改。

  • tmpfs挂载仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统中。

 

 

volumes是用于持久化由Docker容器生成和使用的数据的首选机制。尽管bind mounts取决于主机的目录结构,但是卷完全由Docker管理。与绑定安装相比,卷具有几个优点:

  • 与“bind mounts”安装相比,volumes更易于备份或迁移。
  • 您可以使用Docker CLI命令或Docker API管理“volumes”。
  • 卷在Linux和Windows容器上均可工作。
  • 可以在多个容器之间更安全地共享卷。
  • Volume 驱动程序使您可以将卷存储在远程主机或云提供商上,以加密卷内容或添加其他功能。
  • New volumes的内容可以由容器预先填充。

  

 如果您的容器生成非持久状态数据,请考虑使用 tmpfs挂载以避免将数据永久存储在任何地方,并通过避免写入容器的可写层来提高容器的性能。

 

 bind mounts和volumes都可以使用-v或 --volume标志安装到容器中,但是两者的语法略有不同。对于tmpfs 安装,您可以使用该--tmpfs标志。但是,在Docker 17.06及更高版本中,建议将--mount标志用于容器和服务,用于bind mounts,volumes或tmpfs安装,因为语法更清晰。

选择-v或--mount标志

最初,-v or --volume标志用于独立容器,而--mount标志用于集群服务。但是,从Docker 17.06开始,您还可以使用--mount独立容器。总的来说, --mount是更明确和冗长的。最大的区别是该-v 语法将所有选项合并在一个字段中,而--mount 语法将它们分开。

 

posted @ 2020-05-08 18:00  Merray  Views(262)  Comments(0Edit  收藏  举报