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拥有的卷)时才使用它。