【问题标题】:Docker named volumes vs DOC (data-only-containers)Docker 命名卷与 DOC(仅数据容器)
【发布时间】:2016-03-15 12:38:06
【问题描述】:

直到最新版本的 Docker (v1.10),我们被认为可以使用 DOC:data-only 容器。所以我会创建这样的 DOC(基于例如busybox)并使用--volumes-from 将它链接到我的容器。您仍然可以在 Docker documentation 中阅读有关此内容的信息。

使用新版本的docker,据说我们应该使用named volumes而不是DOC。以下是docker-compose.yml 的示例:

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:

这里我们创建并使用了命名卷es-data

关于这个新功能的文档仍然不多。我在问:

  • 我们可以用命名容器替换 DOC 吗?音量持续多久?如果我删除正在使用它的容器怎么办?
  • 我们怎样才能例如立即备份?以前,我可以先docker run --rm --volumes-from es-data ...,然后再tar

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

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

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

音量会持续多长时间?如果我删除正在使用它的容器怎么办?

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

我们怎样才能例如立即备份?以前,我可以 docker run --rm --volumes-from es-data ... 然后 tar。

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

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

【讨论】:

  • compose 支持挂载external 卷,在这种情况下没有前缀
  • 我很想看看这个例子。
  • 但在这种情况下,compose 不会自己创建卷,它必须已经存在。
  • 我看到我们可以通过在主机上提供名称而不是绝对路径来创建命名卷,例如:-v learnintouch-data:/usr/bin/mysql/install/data 而不是 -v /home/stephane/dev/php/learnintouch/docker/mysql/data:/usr/bin/mysql/install/data。但是我什么时候可以将卷名learnintouch-data/home/stephane/dev/php/learnintouch/docker/mysql/data 的主机位置相关联?
  • 你不能。卷要么是命名卷,要么是主机绑定挂载。
猜你喜欢
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2014-08-08
相关资源
最近更新 更多