docker data volume vs mounted host directory
说卷应该优先于绑定坐骑
关于这个问题,我有几个问题.帖子说:
创建卷时,它存储在Docker主机上的目录中
忍受我,但我是码头工的新手,我想知道这里的码头主机是什么.
它是我构建图像的机器(可能不是)吗?
它是运行图像的机器吗?如果是这样,如果我在多台机器上运行图像会发生什么,它会创建两个独立的卷吗?
当我有开发和生产设置时,docker如何为每个环境管理两个单独的卷?
除此之外,当我使用数据量时,通过做docker-compose来丢失数据似乎相当容易,这是让我不愿意使用数据量的第一个障碍,是否有一个明显的解决方案来缓解这个问题?
最佳答案 这实际上不是一个学说 – 不使用绑定坐骑.是的,如果在默认情况下在容器内具有root权限,则如果安装不正确(例如-v / bin:/ var / log),它们可能会损坏主机的文件系统;它们也不太便携,但它们便于主机和容器之间的文件交换.如果要为服务提供初始配置,或者将编译的源代码放入容器中,我相信您更愿意绑定mount而不是为docker volume cp操作创建和运行临时容器.此外,应尽可能使用:ro选项(只读)以防止从容器内部修改数据.
Docker主机 – 它是一台机器(PC),Docker守护程序正在运行.
Is it a machine where I build the image (probably not)?
不对.您可以远程使用docker CLI或docker API进行构建.
Is it the machine where the image will be run?
是的,图像由docker守护程序运行,因此它将成为主机.
If it is so, what happens if I run the image on multiple machines,
will it create two independent volumes?
这取决于.在不同的机器上运行图像可以通过不同的方式实现,与kubernetes或docker swarm等协调器一起开始,并在单独的docker守护程序上以手动启动结束.使用orchestrator,可以在不同的主机之间共享相同的卷,但在这种情况下,您不能使用绑定挂载,而是使用卷.
When I have developement and production setup, how docker manages two
separate volumes for each environment?
Docker不是你管理的人.
Besides it seems fairly easy to lose data by doing docker-compose down
when I use data volumes, that’s the first obstacle that makes me to
hesitate to use data volumes, is there an obvious solution to mitigate
the issue?
卷可以很容易地在docker-compose会话之间保持不变.实现这一目标的最明确的方法是提前声明卷
docker volume create foo
然后在你的撰写文件中使用它:
version: '3'
services:
abc:
volumes:
foo:/foo
volumes:
foo:
external: true