Docker,卷与绑定挂载,用于持久数据,如DB、elasticsearch?

Docker,卷与绑定挂载,用于持久数据,如DB、elasticsearch?,docker,docker-compose,Docker,Docker Compose,表示卷应优先于绑定挂载 关于这个问题,我有几个问题。邮报说: 创建卷时,它存储在Docker主机上的目录中 请容忍我,但我是docker的新手,我想知道这里的docker主机是什么 它是我构建映像的机器吗(可能不是)? 是运行映像的机器吗?如果是这样,如果我在多台机器上运行映像会发生什么情况,它会创建两个独立的卷吗? 当我有development和production设置时,docker如何为每个环境管理两个单独的卷 除此之外,当我使用数据卷时,通过执行docker compose down似乎

表示
应优先于
绑定挂载

关于这个问题,我有几个问题。邮报说:

创建卷时,它存储在Docker主机上的目录中

请容忍我,但我是docker的新手,我想知道这里的
docker主机是什么

它是我构建映像的机器吗(可能不是)?
是运行映像的机器吗?如果是这样,如果我在多台机器上运行映像会发生什么情况,它会创建两个独立的卷吗?
当我有
development
production
设置时,docker如何为每个环境管理两个单独的卷


除此之外,当我使用数据卷时,通过执行
docker compose down
似乎很容易丢失数据,这是让我犹豫使用
数据卷的第一个障碍,是否有明显的解决方案来缓解这个问题?

这实际上不是一个原则-不使用绑定挂载。是的,默认情况下,一旦您在容器中拥有root权限,如果装载不准确(如
-v/bin:/var/log
),它们就会损坏主机的文件系统;此外,它们的可移植性较差,但便于主机和容器之间的文件交换。当您想要为您的服务提供初始配置,或者将用于编译的源代码放入容器中时,我相信您更喜欢
bind mount
,而不是为
docker volume cp
操作创建和运行临时容器。此外,在可能的情况下,应始终使用
:ro
选项(只读),以防止从容器内部修改数据

Docker主机-它是一台机器(PC),Docker守护进程正在运行

这是我制作图像的机器吗(可能不是)

不是真的。您可以使用
docker CLI
docker API
远程构建

是运行映像的机器吗

是的,映像由docker守护进程运行,因此它将成为主机

如果是这样,如果我在多台机器上运行映像会发生什么, 它会创建两个独立的卷吗

视情况而定。在不同的机器上运行映像可以通过不同的方式实现,首先使用编排器,如
kubernetes
docker swarm
,然后在单独的docker守护进程上手动启动。使用Orchestrator,可以在不同主机之间共享相同的卷,但在这种情况下,您不能使用
绑定装载
,而是使用

当我有了开发和生产设置,docker如何管理两个 每个环境的单独卷

Docker不知道是你管理的

此外,做docker撰写似乎很容易丢失数据 当我使用数据卷时,这是让我 犹豫使用数据量,是否有明显的解决方案来缓解 问题是什么

卷可以在
docker compose
会话之间轻松持久。实现这一点的最明确的方法是使用

docker volume create foo
然后在撰写文件时使用它:

version: '3'
services:
  abc:
    volumes:
      foo:/foo
volumes:
  foo:
    external: true

您是否暗示由
docker volume create foo
创建的卷不会被删除,除非您通过一些
delete或remove命令显式删除,这在正常使用docker/docker compose时是不可能的,如果noone当前连接到itOk,它将一直存在,直到您显式调用
docker volume rm
或类似于
docker system prune
的东西。因此,我在主机中执行
docker volume create foo
我将运行docker,它将在该机器中创建,并且将位于docker容器(或docker compose)的外部?在
docker volume create foo
之后,您将在主机上使用此卷,直到删除它。
external
的意思是它是指向
docker compose
的外部,而不是远程PC。
external
告诉
docker compose
不要自动重新创建这样的卷,而是在声明的卷中查找并连接到它。实际上,
docker compose down
如果未将
-v
选项添加到此命令,则不会删除任何卷。因此,不需要
外部
选项。看见指定了
external
选项后,即使使用
docker compose down-v
也不会删除卷。但这并不意味着您应该始终使用
external
选项来保护卷不被意外删除。仅当它确实是外部卷(不是docker-compose.yml拥有的卷)时才使用它。