阅读文档后,我发现自己对如何最好地管理生产应用程序/服务数据有些困惑。
似乎有3种选择:
-v
参数docker run
)--volumes-from
)docker volume create
)现在,似乎公认的做法是选项 #2,但我想知道 #3 的目的是什么。
特别是您如何正确处理这些场景,docker volume
对于每种情况,最好使用数据卷容器还是这个?
Qui*_*ant 22
从 Docker 1.9 开始,使用Volumes API ( docker volume create --name mydata
)创建命名卷比使用数据卷容器更受欢迎。截至 2016 年 2 月,Docker卷文档已经过时了。Docker 的人自己建议数据卷容器“不再被认为是推荐的模式”,“命名卷应该能够在大多数(如果不是全部)情况下替换仅数据卷”,并且“我看不出有什么理由可以使用纯数据容器。”
And*_*inn 18
我认为#2 和#3 几乎是一回事,主要区别在于#3 没有停止的容器(它实际上只是一个命名卷)。例如,您可以创建一个命名卷并执行与 #2 类似的操作-v
。
创建命名卷:
$ docker volume create --name test
Run Code Online (Sandbox Code Playgroud)
从容器挂载一些数据并将其写入该卷:
$ docker run -v test:/opt/test alpine touch /opt/test/hello
Run Code Online (Sandbox Code Playgroud)
然后,您可以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
Run Code Online (Sandbox Code Playgroud)
这里的优点是,如果您删除仅数据容器,该卷不会意外消失。您现在可以使用docker volume
子命令管理它。
$ d volume ls
DRIVER VOLUME NAME
local test
Run Code Online (Sandbox Code Playgroud)
它还为卷驱动程序打开了可能性,因此您可以在主机之间共享卷(即通过 NFS 命名卷)。这方面的例子可能是Flocker和Convoy。就移动或备份数据而言,Convoy 具有用于备份数据的特定子命令,并允许在主机外部的 NFS 或 EBS 上进行存储。
出于这个原因,我认为更新派的方式(Docker 1.9+)是使用命名卷而不是仅数据容器。
归档时间: |
|
查看次数: |
13938 次 |
最近记录: |