docker-数据管理

来源:互联网 发布:传奇变速源码 编辑:程序博客网 时间:2024/06/08 08:45

相关阅读:关于Docker目录挂载的总结

数据卷

数据卷是一个可供容器使用的目录,它将主机的特定目录直接映射至容器,类似于mount操作。
特点:

  • 数据卷可以在容器之间共享和重用,方便容器间数据传输
  • 对数据卷内数据修改会立马生效,无论是容器内操作还是本地操作
  • 对数据卷更新不会影响镜像,把应用和数据进行了解耦
  • 卷会一直存在,直到没有容器使用它,才可以安全的卸载

在容器内创建一个数据卷

docker run -d -P --name web -v /webapp training/webapp python all.py
在运行docker run命令的时候,-v参数可以在容器内创建一个数据卷。上面的例子就是使用training/webapp 镜像创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录。-P参数是将容器的端口暴露,自动映射到本地的临时端口。

挂载一个本地目录到容器内

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令把本地/src/webapp挂载到容器/opt/webapp作为数据卷,这个功能可以方便测试,用户把数据放在本地挂载到容器以便使用。此外,目录路径必须使用绝对路径,目录不存在docker会自动创建。

另外,docker挂载的数据卷默认为读写权限(rw),用户也可以挂载为只读:
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
挂载了只读权限后,容器内无法修改数据卷的内容。

挂载一个本地文件

docker run --rm -it -v /mnt/test.txt:/.test.txt centos /bin/bash

不推荐此操作,直接挂载文件到容器,经过文件内容修改后,文件的inode号会被改变。所以尽量使用目录挂载

数据卷容器

如果用户需要在多个容器间共享一些持续更新的数据,最简单的方式就是采用数据卷容器。本身也是一个容器,用来给其他容器挂载。

docker run -it -v /dadata --name dbdata centos[root@865b518cce7b /]# lsanaconda-post.log  dadata  etc   lib    lost+found  mnt  proc  run   srv  tmp  varbin                dev     home  lib64  media       opt  root  sbin  sys  usr

可以看到,已经有一个dbdata目录。
现在可以把这个容器挂载到其他容器中,例如创建db1和db2两个容器,使用--volume-from来挂载容器:

docker run -it --volumes-from dbdata --name db1 centosdocker run -it --volumes-from dbdata --name db2 centos

在其中一个容器中的dbdata/下创建一个文件,在其它容器中查看:

[root@4d1348dd5e0f /]# cd dbdata/[root@4d1348dd5e0f dbdata]# touch text[root@4d1348dd5e0f dbdata]# exit#文件创建完毕[root@docker-test ~]# docker exec -it db1 bash[root@ebee9a10ab2c ~]# ls /dbdata/text

类似于文件的链接功能,多次使用--volumes-from可以从多个数据卷容器挂载,还可以从挂在了数据卷容器的容器挂载父数据卷容器。
数据卷容器本身不必要在运行状态

上面的数据卷同时存在于三个容器中:dbdata、db1、db2,删除了容器本身并不会删除数据卷,如果要删除数据卷,,必须在最后一个挂载容器删除时使用docker rm -v指定删除数据卷和容器。

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

通过备份,恢复实现数据的迁移。

备份

使用下面的命令备份dbdata容器内的数据卷:
docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar cvf /backup/backup.tar /dbdata
这个命令分为3个大的步骤:

  • 首先创建一个worker容器,挂载dbdata的数据卷(即dbdata)
  • 使用-v $(pwd):/backip把本地当前目录挂载到worker容器的/backup目录
  • worker容器启动后,使用tar cvf /backup/backup.tar /dbdata来把/dbdata下的文件压缩至/backup,同时也存在了本地的当前目录下。

恢复

要将备份的数据恢复到容器,需要以下两个步骤:
首先新建一个数据卷容器:docker run -v /data --name data centos
然后新建另一个容器,挂载data容器,使用untar解压备份的文件至/data中:
docker run --volumes-from data -v $(pwd):/backup centos tar xvf /backup/backup.tar