如何在Docker卷容器和Docker卷之间决定?


24

阅读文档后,我发现自己对如何最好地管理生产性应用程序/服务数据有些困惑。

似乎有3种选择:

  1. 只需将卷映射到主机目录(即的-v参数docker run
  2. 创建用于数据的docker容器映像(即,单独的容器和--volumes-from
  3. 创建一个docker卷(即docker volume create

现在,似乎可以接受的做法是选择#2,但是然后我想知道#3的目的是什么。

尤其是您如何正确地处理这些docker volume情况?对于每个情况,使用数据卷容器还是更好?

  • 您需要服务器中单独的卷和/或存储层中的应用程序数据
  • 备份
  • 恢复数据


@MichaelHampton我意识到我应该改写我的问题
dukeofgaming

#1不是一个严肃的生产选择;如果存在替代方案,则基本上不应该这样做。
迈克尔·汉普顿

2
@MichaelHampton为什么?,数据可能没有被码头化,但是主机OS仍由监视和备份的基础架构团队管理
dukeofgaming

@dukeofgaming更不用说您可以运行btrfs scrub它来查找和纠正损坏的文件。我不确定dockerized的工作方式如何,但是我想它不能防止数据腐烂,因此,如果发生某些不良情况,我总是需要完全还原,而不仅仅是还原单个文件。另一个想法是,它增加了另一层抽象,因此减慢了文件读取和写入的速度。我以某种方式看不到#2和#3的优势,但是我对Docker没有经验,所以这可能会改变。
inf3rno

Answers:


18

我认为#2和#3几乎是同一件事,主要区别是#3没有停止的容器(从字面上看,只是一个命名的卷)。例如,您可以创建一个命名卷,并类似地执行与#2相同的操作-v

创建一个命名卷:

$ docker volume create --name test

从容器挂载一些数据并将其写入该卷:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

然后,您可以将同一test卷装入另一个容器中并读取数据:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

这样做的好处是,如果删除仅数据容器,该卷不会意外消失。现在,您可以使用docker volume子命令对其进行管理。

$ d volume ls
DRIVER              VOLUME NAME
local               test

它还为将来的卷驱动程序打开了可能性,因此您可以在主机之间进行共享卷(即,通过NFS命名卷)。例如FlockerConvoy。就移动或备份数据而言,Convoy具有用于备份数据的特定子命令,并允许将其存储在主机外部的NFS或EBS上。

因此,我认为更新的方法(Docker 1.9+)是使用命名卷而不是仅数据容器。


谢谢,您回答了我的大多数问题,但是在不同物理卷层中管理容器数据的要点仍然没有得到回答,这很关键……假设这是一个git repo管理解决方案,我需要容器的那一部分数据0(位于dockerfile中定义的卷)位于不同物理主机卷(即另一个分区,物理磁盘或其他)中的第0层存储中
dukeofgaming

有点带有音量司机提一样。现在,要在物理本地存储驱动程序外部存储数据,您将需要使用专门执行您要执行的操作的驱动程序。在我头顶上,有github.com/rancher/convoygithub.com/ClusterHQ/flocker。Convoy目前支持NFS和GlusterFS,这听起来与您所追求的更加接近。我将修改答案以澄清这一点。
安迪·辛

使用devicemapper驱动程序似乎可以回答我的问题,谢谢!docs.docker.com/engine/userguide/storagedriver/…–
dukeofgaming

the volume won't accidentally disappear if you remove the data-only container。你能详细说明一下吗?谢谢。
Stephane'9

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.