docker data volume vs mounted host directory
说volumes
胜过bind mounts
我对此问题有几个疑问。帖子说:
When you create a volume, it is stored within a directory on the Docker host
与我同在,但是我是Docker的新手,我想知道docker host
是什么。
是我在其中构建映像的机器(可能不是)吗?
是运行映像的机器吗?如果是这样,如果我在多台计算机上运行映像会发生什么,它将创建两个独立的卷吗?
当我设置了developement
和production
时,docker如何为每个环境管理两个单独的卷?
除了在我使用数据量时通过执行docker-compose down
丢失数据似乎相当容易之外,这是让我犹豫使用data volumes
的第一个障碍,是否有明显的解决方案来缓解该问题?
答案 0 :(得分:1)
实际上这不是一个原则-不使用绑定挂载。是的,默认情况下,一旦在容器中具有root特权,它们安装不正确(例如-v /bin:/var/log
)就会损坏主机的文件系统;它们的便携性也较差,但它们有助于主机和容器之间的文件交换。当您想为服务提供初始配置,或将要编译的源代码放入容器中时,我相信您宁愿使用bind mount
而不是为docker volume cp
操作创建和运行临时容器。另外,在可能的情况下,应始终使用:ro
选项(只读),以防止从容器内部修改数据。
Docker主机-它是运行Docker守护程序的计算机(PC)。
是否是我在其中构建映像的机器(可能不是)?
不是。您可以远程使用docker CLI
或docker API
进行构建。
是运行图像的机器吗?
是的,映像由docker守护程序运行,因此它将成为主机。
如果是这样的话,如果我在多台计算机上运行映像会发生什么, 它会创建两个独立的卷吗?
这取决于。可以通过不同的方式来实现在不同机器上运行映像的方法,它们可以与kubernetes
或docker swarm
之类的编排器凝视,最后可以在单独的docker守护程序上手动启动。使用协调器,可以在不同的主机之间共享相同的卷,但是在这种情况下,您不能使用bind mounts
,而要使用volumes
。
当我完成开发和生产设置后,Docker如何管理两个 每个环境都有单独的卷?
Docker并非由您来管理。
此外,通过执行docker-compose down似乎很容易丢失数据 当我使用数据量时,这是我遇到的第一个障碍 犹豫使用数据量,是否有明显的解决方案来缓解 问题?
音量可以轻松地在docker-compose
个会话之间保持。最明确的实现方法是提前声明音量
docker volume create foo
,然后在撰写文件中使用它:
version: '3'
services:
abc:
volumes:
foo:/foo
volumes:
foo:
external: true