文档章节

Docker Volume 使用简介

傻傻知不道
 傻傻知不道
发布于 2017/06/26 19:51
字数 1734
阅读 444
收藏 0

内容提要

一、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/ 翻译

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

© 著作权归作者所有

傻傻知不道
粉丝 4
博文 17
码字总数 15533
作品 0
东城
程序员
私信 提问
Docker进阶与实战_帝都客_ pdf扫描版_完整版_资源免费下载

《Docker进阶与实战》由机械工业出版社出版。 PDF下载地址 :http://www.diduker.com/html/4640.html PDF相关截图 : 编辑推荐 作者简介 华为Docker实践小组,致力于容器技术探索,结合华为C...

909636801
2018/07/18
0
0
下一代工具集 BuildKit 大揭秘,Docker 专家带你了解背后的点点滴滴

本文首发自“Docker公司”公众号(ID:docker-cn) 编译丨小东 每周一、三、五 与您不见不散! 上周,我们在 Docker 总部成功地举办了 Docker San Francisco 的分会活动。本次活动主要聚焦在...

docker公司
2018/08/06
0
0
Tutum公司简介

本文来源:Ghostcloud翻译   2015年10月21日,由Tutum公司的CEO Borja Burgos对外宣布,Tutum与Docker公司正式合作,大家对Tutum和Docker的合作还是很期待的。下面我简单介绍一下Tutum公司...

精灵云
2016/06/01
0
0
如何免 sudo 使用 docker

简介 默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,非常浪费时间影响效率。如果不跟 sudo,直接执行 命令会有如下问题: FATA[0000] Get http:///var/run/docker.sock/v1....

明月惊鹊
2015/09/14
828
0
深圳 Docker Meetup

三年光阴,如白马过隙。三年里,随着 Docker 引擎的升级,Docker Native(原生)在存储、集群、安全等方面的性能得到极大的提升。Docker Native 是包括 Docker Engine、Docker Swarm、Docke...

DaoCloud
2016/03/22
3
0

没有更多内容

加载失败,请刷新页面

加载更多

如何使用soapUI模拟webservice客户端发送请求

参考资料 https://jingyan.baidu.com/article/cbcede0712849a02f40b4d88.html 左边是请求参数,可以自己填写!按着那个绿色三角箭头可以模拟发送请求,右边是返回的报文 soapui如何发送xml格...

故久呵呵
26分钟前
4
0
Java Security 介绍

1.介绍 Java平台设计的重点是安全性。在其核心,java语言本身是类型安全的并且提供了垃圾自动回收,这使其增加了应用程序代码的健壮性。安全的类加载以及验证机制确保了只有合法的代码才能够...

lixiaobao
32分钟前
4
0
Niushop开源商城系统-分销商管理

分销商管理 1.分销员的招募与管理 如何申请成为分销员? 在wap端个人中心满足之前设置的升级条件,可以申请分销员 开启分销商审核,需要在后台分销商管理——》待审核处进行审核通过。 通过完...

niushop-芳
32分钟前
3
0
为什么大公司一定要使用 DevOps?

究竟什么是DevOps? 要想回答这个问题,首先要明确DevOps这个过程参与的人员是谁,即开发团队和IT运维团队。那么,DevOps的意图是什么呢?即在两个团队之间,建立良好的沟通和协作,更快更可靠...

cs平台
34分钟前
5
0
高危预警|RDP漏洞或引发大规模蠕虫爆发,用户可用阿里云免费检测服务自检,建议尽快修复

2019年9月6日,阿里云应急响应中心监测到Metasploit-framework官方在GitHub空间公开了针对Windows远程桌面服务远程命令执行漏洞(CVE-2019-0708)的利用代码。利用该代码,无需用户交互操作,即...

Mr_zebra
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部