Car*_*ven 1 docker docker-compose docker-volume
在声明中声明有什么区别 docker-compose.yml文件中卷部分与仅在服务下使用卷关键字有?
例如,我以这种方式为容器映射一个卷:
services:
mysqldb:
volumes:
- ./data:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
这将从我的工作目录映射到名为 data 的文件夹。
但我也可以通过声明一个卷部分来映射一个卷,并为容器使用它的别名:
services:
mysqldb:
volumes:
- data_volume:/var/lib/mysql
volumes:
data_volume:
driver: local
Run Code Online (Sandbox Code Playgroud)
在这种方法中,存储映射文件的实际位置似乎在某种程度上由 docker compose 管理。
这两种方法有什么区别或者它们是一样的吗?我应该真正使用哪一种?
使用一种方法比另一种方法有什么好处吗?
您所描述的方法之间的区别在于,第一种方法是bind mount,另一种是volume。这些是更多的 Docker 功能(而不是 Docker Compose),并且通过从主机的文件系统挂载路径,卷提供了一些好处。如文档中所述,它们:
docker volumes或 API进行管理(与原始文件系统相反)使用卷的另一个巨大好处是卷驱动程序,您可以指定它来代替local。它们允许您远程存储卷(即云等)或添加其他功能,如加密。这是容器概念的核心,因为如果正在运行的容器是无状态的并使用远程卷,那么您可以跨主机移动容器,并且无需重新配置即可运行。
因此,建议使用 Docker 卷。另一个很好的例子如下:
services:
webserver_a:
volumes:
- ./serving/prod:/var/www
webserver_b:
volumes:
- ./serving/prod:/var/www
cache_server:
volumes:
- ./serving/prod:/cache_root
Run Code Online (Sandbox Code Playgroud)
如果将./serving目录移动到其他位置,则绑定安装会中断,因为它是相对路径。正如您所指出的,卷具有别名并且它们的路径由 Docker 管理,因此:
local存储数据的卷在系统上的其他地方,并会继续安装就好了TL;DR:尝试使用卷。它们是可移植的,并鼓励减少对主机的依赖的实践。
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |