dockerDataManagement - juedaiyuer/researchNote GitHub Wiki

#Docker数据管理#

##Data volumes 数据卷##

数据卷是一个由 UFS 文件系统专门设计的的特殊目录,它可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的改变是立马生效
  • 当你更新数据卷中的数据的时候,不会被包含到 image 中
  • 卷会一直存在直到没有容器使用他们

###添加一个数据卷###

# 创建一个新的卷到容器的 /webapp
$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

#dockerfile中使用volume来添加一个或者多个新的卷到该image创建的任意容器

###挂载一个主机目录作为数据卷###

#dockerfile 中不能用,各种操作系统的文件路径格式不一样,所以不一定适合所有的主机
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

#docker 加载的数据卷默认是读写权限,但我们可以把它加载为只读(:ro)

##Data Volume Container 数据卷容器##

如果你有一些持续更新的数据需要在容器之间共享,最好创建 Data Volume Container ,然后加载它

$ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for
postgres
# 然后,你可以在其他容器中使用 --volumes-from 来挂载 /dbdata 卷
$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres
$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres
# 还可以使用多个 --volumes-from 参数来从多个容器挂载多个数据卷
# 也可以从其他已经挂载了容器卷的容器来挂载数据卷
$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

数据卷另外一个功能是使用他们来备份、恢复、移动数据

#先挂载数据卷
#当前本地主机挂载当前容器backup目录
#tar命令压缩
$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

你可以使用这个备份来恢复这个容器。
$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
# 然后使用 untar 解压这个备份文件到新容器卷中。
$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
你可以用上述技术实现数据卷的备份、移动、恢复。