Docker-学习四(数据管理)

内容提要

利用数据卷对数据进行持久化,备份,恢复,及多个容器数据共享,实现数据的迁移等。
数据管理的两种方式:

  • 数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
  • 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。

数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux中的mount操作。(就是将一个设备(U盘/SD卡等)挂接到一个已存在的目录上。访问这个目录就是访问该存储设备)。

  • 可以在容器之间共享和重用;
  • 对数据卷内数据的修改会马上生效,无论是容器内操作的还是容器操作的;
  • 数据卷的操作不会影响镜像,解耦应用和数据;
  • 卷会一直存在直到没有容器使用才可卸载。

1.容器内创建数据卷

启动容器时使用-v标记在容器内创建数据卷,多次使用可以创建多个数据卷。
使用training/webapp 镜像创建一个 web容器,并创建一个数据卷挂载到容器的/webapp 目录:

docker run -d -P --name web -v /webapp  training/webapp python app.py

2.挂载主机目录作为数据卷(推荐)

使用-v参数也可以挂载本地已有的目录到容器中作为数据卷。

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

加载主机的/ src/webapp 目录到容器的/ opt/webapp 目录,本地目录的路径必须是绝对路径,如果目录不存在Docker会自动创建。
Docker 挂载数据卷的默认权限是读写(rw),用户也可以通过 ro 指定为
只读:

 docker run -d -P --name web -v /src/webapp:/opt/webapp:ro  training/webapp python app.py

3.挂载一个本地主机文件作为数据卷(不推荐)

-v标记也可以从主机挂载单个文件到容器作为数据卷

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

数据卷容器

数据卷容器也是一个容器,它的目的是用来提供数据卷供其他容器挂载。

1.创建数据卷容器dbdata,并创建一个数据卷挂载到/dbadata

docker run -it -v /dbdata --name dbdata ubuntu

2.在其他容器中使用–volumes-from 来挂载 dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata 容器挂载数据卷

docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu

容器 db1和db2 都挂载同一个数据卷到相同的/ dbdata 目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。
可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。
注:

使用--volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状
态。
如果删除了挂载的容器,数据卷不会自动删除。必须删除最后一个挂载它的容器时显式使用docker rm-v 来指定同时删除关联的容器。

利用数据卷容器来迁移数据

1.备份

使用下面命令备份dbdata数据卷容器内的数据卷

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

首先利用 ubuntu 镜像创建了一个容器worker。使用–volumes-from dbdata 参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷);使用-v$(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup 目录。
worker 容器启动后,使用了 tar cvf/backup/backup.tar/dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。

2.数据恢复

如果要将数据恢复到一个容器,可以按照下面的步骤操作。首先创建一个带有数据卷的容器dbdata2

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后创建另一个新的容器,挂载dbdata2的容器,并解压备份文件到所挂载的容器卷中

docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值