命名卷如何在docker中工作?

时间:2017-04-06 07:51:44

标签: docker docker-compose

我很难理解命名卷在docker docs的以下示例中的确切作用:

C:\WINDOWS\SYSTEM32

我的猜测是,第一次出现的命名卷(#1) 定义了卷内包含的内容,而后续出现的内容(#2 )只需分享卷的内容与它们所引用的任何容器。

猜测是否正确?

2 个答案:

答案 0 :(得分:5)

在顶级data-volume:键下列出volumes:会在主机上创建一个命名卷(如果它尚不存在)。根据此source

,其行为方式如下
  
      
  1. 如果通过docker run -v my-precious-data:/ data imageName从image运行新容器来创建命名卷,则/ data下的image / container中的数据将被复制到named中体积。

  2.   
  3. 如果您创建另一个容器绑定到现有的命名卷,则不会复制/覆盖新映像/容器中的任何文件,它将使用指定卷内的现有数据。

  4.   
  5. 他们没有docker命令来备份/导出命名卷。但是,您可以通过“docker volume inspect [volume-name]”找到文件的实际位置。
  6.   

如果卷为空并且两个容器都在目标目录中有数据,则要运行的第一个容器将其数据装入卷,而另一个容器将看到该数据(而不是它自己的数据)。我不知道哪个容器会先运行(虽然我希望它从上到下执行)但是你可以使用depends_on强制执行一个订单here

-------------------更新

  

使用版本3 Compose文件在swarm模式下部署堆栈时,将忽略depends_on选项。

答案 1 :(得分:0)

我理解你的猜测方式,你并不完全正确。

在docker-compose文件中声明和引用一个命名卷将创建一个空卷,然后可以在其卷部分中说明这些内容的服务进行访问和共享。

如果要共享命名卷,则必须在docker-compose文件的顶级卷部分中声明此卷。示例(如已在您自己链接的docker文档中):

version: "3"

services:
  db:
    image: db
    volumes:
      #1 uses the named and shared volume 'data-volume' created with #3
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      #2 uses the named and shared volume 'data-volume' created with #3
      - data-volume:/var/lib/backup/data

volumes:
  #3 creates the named volume 'data-volume' 
  data-volume:

启动时卷将为空(因此,装入该卷的容器中的文件夹)。它的内容将是运行时服务活动的结果。

希望能让它更加清晰。