Docker Volume 使用简介

内容提要

一、Docker Volume 是什么

二、Docker Volumes 使用简介

三、Docker Volume containers 使用简介

四、备份、回复和迁移Docker Volumes

五、使用Docker Volume 注意事项

================================

1、Docker Volumes (数据卷)是什么

       Volume可以使容器以及容器产生的数据分离开,这样当一个容器被删除时,其容器应用产生的数据不会被删除,而且该数据还可以被其他容器挂载和使用。数据卷的使用方便了用户对容器应用产生数据的管理。可以方便的进行查看、备份、数据共享等

       Docker 引擎对Volume管理方式可以通过如下两种方式来进行:

  1. Docker Volumes (数据卷)
  2. Docker Volume containers(数据卷容器)

2、Docker Volumes 使用简介

       数据卷是一个可供容器使用的特殊目录,它绕过文件系统(Union File System),可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会及时生效
  • 对数据卷的更新不会影响镜像本身
  • 即使容器本身没有启动,甚至容器本身被删除,数据卷会一直存在
  • 数据卷被设计成保存数据,独立于容器的生命周期,因此,在删除容器时,Docker不会自动删除卷,也不会“垃圾回收”不再被容器引用的卷

2.1 添加数据卷

     您可以使用 docker createdocker run 命令,加- v 参数将数据卷添加到容器中。
     您还可以多次使用- v来挂载多个数据卷。
     例如:下面的命令,将在web容器内创建一个新卷 /data

$ docker run -d -P --name web -v /data training/webapp
$ docker run -d -P --name web -v /data1 -v /data2 training/webapp

2.2 查找数据卷

       您可以通过使用 docker inspect 命令来查看应用容器的卷。

$ docker inspect web

      该命令输出容器配置的详细信息。输出类似于下面的内容:

...
"Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]
...

 

2.3 将主机目录挂载为数据卷

$ docker run -d -P --name web -v /src/data:/data training/webapp

      该命令将主机目录(/src/data)挂载到容器的/data目录中。如果路径/data已经存在于容器中,/src/data将覆盖,但不删除已存在的内容。一旦移除挂载,将再次访问内容。这与mount命令的预期行为一致。

     注意:主机目录本质上是与主机相关的。出于这个原因,您无法从Dockerfile上挂载主机目录,VOLUME指令不支持挂载主机目录,因为构建映像应该是可移植的。主机目录无法在所有潜在主机上使用。     

3、Docker Volume containers 使用简介

       如果您有一些持久数据,希望在容器之间共享,或者想在非持久性容器中使用,最好创建一个命名的数据卷容器,然后从它装载数据。下面我们创建一个新命名的容器,其中有一个数据卷用来共享。虽然这个容器不运行应用程序,但它重新使用了training/postgres映像,以便所有的容器都使用相同的层来保存数据,节省磁盘空间。

3.1 创建一个数据卷容器

$ docker create -v /dbdata --name dbstore training/postgres /bin/true

       然后,您可以使用 --volumes-from 参数来在另一个容器中挂载/dbdata卷。

$ docker run -d --volumes-from dbstore --name db1 training/postgres

$ docker run -d --volumes-from dbstore --name db2 training/postgres

     在本例中,如果postgres映像包含一个名为 /dbdata 的目录,那么从dbstore容器中安装卷将从postgres映像中隐藏 /dbdata文件。结果只有来自dbstore容器的文件是可见的。

       您可以多次使用 --volumes-from 参数,将数据卷从多个容器中组合起来。

3.2 挂载数据卷

例如:

$ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd

      --volumes-from 参数从指定容器中装载所有已定义的卷。容器可以通过复用参数--volumes-from,容器ID可选后缀为:ro或:rw,分别以只读或读写模式装载该卷。默认情况下,卷将以相同的模式装载(读写或只读)作为引用容器。

4、备份、回复和迁移Docker Volumes

      我们可以使用卷执行的另一个有用功能是用于备份、恢复或迁移。

      您可以使用 --volumes-from 参数来创建一个新的容器来装载这个卷,比如这样:

$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

      在这里,您已经启动了一个新的容器,并从dbstore容器中安装了卷。然后将本地主机目录安装为/backup。然后,该命令使用tar将 dbdata 数据卷的内容备份到 /backup/backu.tar文件。当命令完成,容器停止时,我们将保留 dbdata卷的备份。

        您可以将其恢复到相同的容器,或者您在其他地方所做的另一个容器。

        创建一个新容器。       

$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash

        然后将备份文件从新容器的数据卷中解压。

$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

        您可以使用上面的技术来自动化备份、迁移和使用您的首选工具来恢复测试。

5 查看数据卷

     您可以使用docker卷列出所有现有的卷。

$ docker volume ls
DRIVER              VOLUME NAME
local               ec75c47aa8b8c61fdabcf37f89dad44266841b99dc4b48261a4757e70357ec06
local               f73e499de345187639cdf3c865d97f241216c2382fe5fa67555c64f258892128
local               tmp_data

 

6 删除数据卷

       在删除一个容器后,Docker数据量仍然存在。您可以创建命名或匿名卷。命名卷在容器外有一个特定的源形式,例如:awesome:/ bar。匿名卷没有特定的来源。当容器被删除时,您应该指导Docker引擎守护进程清除匿名卷。为此使用- rm选项,例如:

$ docker run --rm -v /foo -v awesome:/bar busybox top

       这个命令创建一个匿名 /foo 卷。当容器被删除时,Docker引擎会删除/foo卷,但不是awesome卷。          删除所有未使用的卷和腾出空间

$ docker volume prune

       它将删除与任何容器无关的所有未使用的卷。

7、使用 Docker Volume 注意事项

      多个容器也可以共享一个或多个Volume。但是,多个容器写入单个共享卷可能导致数据损坏。所以请确保您的应用程序被设计成写入共享数据存储。

       从Docker主机直接访问数据卷。这意味着您可以使用普通的Linux工具来读和写。在大多数情况下,您不应该这样做,因为如果您的容器和应用程序不知道您的直接访问,就会导致数据损坏。

本文主要是对 Docker官方文档https://docs.docker.com/engine/tutorials/dockervolumes/ 翻译

欢迎大家关注懒也要有正确的方式公众号

转载于:https://my.oschina.net/u/1251444/blog/1031532

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值