eug*_*ene 6 docker docker-compose
说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,是否有明显的解决方案来缓解这个问题?
这实际上不是一个原则——不使用绑定安装。是的,如果-v /bin:/var/log默认情况下您在容器内拥有 root 权限,如果安装不正确(例如),它们可能会损坏主机的文件系统;它们的便携性也较差,但它们有助于主机和容器之间的文件交换。当您想要为您的服务提供初始配置,或者将用于编译的源代码放入容器时,我相信您更愿意bind mount而不是创建和运行临时容器来进行docker volume cp操作。另外,您应该尽可能使用:ro选项(只读)来防止容器内部的数据修改。
Docker 主机 - 它是一台机器(PC),Docker 守护进程在其中运行。
它是我构建镜像的机器吗(可能不是)?
不对。您可以使用docker CLI或docker API远程构建。
是运行映像的机器吗?
是的,镜像由 docker 守护进程运行,因此它将成为主机。
如果是这样,如果我在多台机器上运行该映像会发生什么,它会创建两个独立的卷吗?
这取决于。在不同的机器上运行镜像可以通过不同的方式来实现,从像kubernetes或 这样的编排器开始docker swarm,最后在单独的 docker 守护进程上手动启动。使用协调器,可以拥有相同的卷,在不同的主机之间共享,但在这种情况下,您不能使用bind mounts,而是使用volumes.
当我进行开发和生产设置时,docker 如何为每个环境管理两个单独的卷?
Docker 不是由你来管理的。
此外,当我使用数据卷时,通过执行 docker-compose down 似乎很容易丢失数据,这是让我犹豫使用数据卷的第一个障碍,是否有一个明显的解决方案来缓解这个问题?
卷可以在docker-compose会话之间轻松保留。实现这一目标的最明确方法是提前声明数量
docker volume create foo
Run Code Online (Sandbox Code Playgroud)
然后在您的撰写文件中使用它:
version: '3'
services:
abc:
volumes:
foo:/foo
volumes:
foo:
external: true
Run Code Online (Sandbox Code Playgroud)