理解Docker Compose中卷的工作原理

69次阅读
没有评论

问题描述

在学习Docker Compose时,对于其中涉及卷的部分有一些疑惑。在WordPress的Docker Compose示例中,Ycode列表[1]中写道:

volumes:
  - db_data:/var/lib/mysql

用户想要弄清楚这里的确切含义。与此对比,在使用Docker客户端时,可以将卷映射到主机文件夹[2]:

-v /src/webapp:/webapp

这个命令将主机目录/src/webapp挂载到容器中的/webapp路径。用户想要理解这两者之间的区别与联系。

解决方案

方案1

请注意以下操作注意版本差异及修改前做好备份。

在Docker Compose中,卷的定义和映射方式有一些不同。在Ycode的示例中,db_data:/var/lib/mysql这一行代码实际上是在指定一个已经创建的名为db_data的卷(volume),并将这个卷映射到容器中的/var/lib/mysql路径。这意味着容器可以在这个路径下读写数据,并且这些数据将被保持持久化,即使容器被销毁和重新创建,数据依然存在。

相比之下,使用Docker客户端的-v /src/webapp:/webapp命令是将主机上的文件夹/src/webapp直接映射到了容器内的/webapp路径,但并没有涉及到卷的创建和管理。这种方式更适合临时性的数据传递,不会保存数据的持久性。

所以,总结起来,db_data:/var/lib/mysql这种形式在Docker Compose中是利用了已经创建的卷,而-v /src/webapp:/webapp则是直接将主机上的文件夹映射到容器路径。

方案2

另一种解释方式是,db_data:/var/lib/mysql这行代码定义了一个名为db_data的命名卷(named volume),该命名卷将会在Compose文件的末尾被声明。这个命名卷在容器中的路径是/var/lib/mysql。这种方式可以在不直接使用主机路径的情况下,为容器提供持久性的存储。不同于主机映射,这种命名卷会自动被Docker管理,数据持久性更好。

总结来说,db_data:/var/lib/mysql是在定义一个名为db_data的命名卷,而-v /src/webapp:/webapp是将主机上的文件夹直接映射到容器路径。这两者的作用和管理方式有所不同。

引用

[1] Docker Compose for WordPress
[2] Docker Volumes

正文完