2016-03-15 48 views
18

直到最近版本的Docker(v1.10),我们都认为我们可以使用DOC:数据专用容器。所以我会创建这样的DOC(基于例如busybox)并使用--volumes-from将其链接到我的容器。你仍然可以在Docker documentation阅读。Docker名为volume vs DOC(仅限数据容器)

随着新版本的码头,据说,而不是DOC,我们应该使用named volumes。下面是docker-compose.yml一个例子:一个名为量es-data

version: '2'  
services: 
    elasticsearch: 
    image: elasticsearch:2.2.0 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
     - "9201:9200" 
    volumes: 
     - "es-data:/usr/share/elasticsearch/data" 

volumes:  
    es-data: 

在这里,我们创建和使用。

这个新功能还没有太多的文档。我在问:

  • 我们可以用指定容器替换DOC吗?音量持续多久?如果我删除使用它的容器怎么办?
  • 我们可以如何立即备份?以前,我可以docker run --rm --volumes-from es-data ...然后tar吧。
+2

“我们可以替换...”吗? - 参见https://github.com/docker/docker/issues/17798#issuecomment-154815207 – amartynov

+2

仅供参考“基于busybox” - 它被认为是错误的,请查看[Data-only container madness](http://container42.com/2014/11/18/data-only-container-madness /) – amartynov

回答

15

我们可以用命名容器替换DOC吗?

在许多情况下,是的,命名容器将是更好的选择。

卷的持续时间有多长?如果我删除使用它的容器怎么办?

如果您删除容器,音量将仍然存在。删除卷的唯一方法是使用docker-compose down -vdocker volume rm <volume name>

我们可以如何立即备份?以前,我可以运行docker run --rm --volumes -es-data ...然后tar它。

而不是--volumes-from,您可以使用--volume=<volume name>

请注意,由docker-compose创建的卷始终以项目名称作为前缀,因此如果将它与docker命令一起使用,则全名实际上是<project_name>_es-data

+3

撰写支持挂载[外部](https://docs.docker.com/compose/compose-file/#external)卷,在这种情况下没有前缀 – amartynov

+0

我很想看到一个这样的例子。 – Cezar

+0

但是在这种情况下,撰写不会创建卷本身,它必须已经存在。 –