数据管理

Posted tz90

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据管理相关的知识,希望对你有一定的参考价值。

一、管理数据的两种方式

1.1 数据卷

容器内的数据直接映射到本地主机中。

1.2 数据卷容器

使用特定容器维护数据卷,让其在容器和主机、容器和容器之间共享数据。

二、数据卷

2.1 特性

  • 可以在容器之间共享
  • 对数据卷内的数据会立刻生效
  • 对数据卷的更新不会影响镜像
  • 数据卷会一直存在,直到卸载它

2.2 创建数据卷

使用volume子命令创建数据卷,存放在/var/lib/docker /volumes路径下

$docker volume create –d local test
$ls –l /var/lib/docker /volumes
#除此之外还有如下子命令
$docker volume inspect 查看详细信息
$docker volume ls 列出已有数据卷
$docker volume prune 清理无用数据卷
$docker volume rm 删除数据卷

2.3 绑定数据卷

将本地主机的任意路径挂载到容器中做数据卷称为绑定数据卷。

使用-mount选项在创建容器

$docker run –d –P –name web –mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
#上一条命令相当于如下使用-v命令指定目录
$docker run –d –P –name web –v /webapp:/opt/webapp training/webapp python app.py

需要注意的是,本地路径必须是绝对路径,容器内可以为相对路径,如果容器内路径不存在,会自动创建。

Docker挂载数据卷的默认权限是rw,可以更改为ro,让其无法更改数据卷内的文件

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

需要注意,如果直接挂载文件到容器内,使用编辑工具编辑文件会造成文件inode改变从而报错,所以推荐挂载文件所在的目录到容器内。

三、数据卷容器

数据卷容器是一个专门提供数据卷给其他容器挂载的容器。

创建一个容器作为数据卷容器,并创建一个dbdata目录用于挂载数据

$docker run –it –v /dbdata –name dbdata ubuntu
ls

创建db1跟db2容器并使用—volumes-from命令挂载数据卷容器的dbdata目录

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

此时读写dbdata目录中的文件对三个容器是实时更新的

除此之外还可以从其他已经挂载了容器卷的容器里挂载数据卷

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

使用—volumes-from参数所挂载数据卷的容器自身不需要保持在运行状态

四、删除容器卷

在挂载它的容器中使用docker rm -v命令(先写在这里明天实践)

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

5.1 备份

$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(这么一大串实践明天看懂了就删了)

5.2 恢复

创建一个带有数据卷的容器dbdata2

$docker run –v /dbdata –name dbdata2 ubuntu /bin/bash

创建一个新的容器,挂载dbdata2,使用untar解压备份文件到所挂载的容器卷中

$docker run –volumes-from dbdata2 –v $(pwd):/backup busybox tar xvf /backup/backup.tar

以上是关于数据管理的主要内容,如果未能解决你的问题,请参考以下文章

massCode 一款优秀的开源代码片段管理器

如何管理在每个 git 版本中添加私有代码片段?

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

将代码片段插入数据库并在 textarea 中以相同方式显示

如何使用Android片段管理器传递变量[重复]

YASnippet - emacs 的代码片段管理工具