Docker数据管理

99 阅读2分钟

在容器中管理数据主要有两种方式

  1. 数据卷
  2. 数据卷容器

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过了UFS,可以提供很多很有用的特性

  • 数据卷可以在容器间共享和重用
  • 对数据卷的修改会马上生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用 数据卷的使用,类似于linux目录下或文件进行挂载

创建一个数据卷

在使用docker run命令的时候,使用-v来创建一个数据卷并挂载到容器里面,在一次run中多次使用可以挂载多个数据卷 如下则是创建一个web容器,并加载一个数据卷到容器的/webapp目录中 $sudo docker run -d -P --name web -v /webapp training/webapp ptyhon app.py

也可以挂载一个主机的目录到容器中去

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

这条命令指的是创建一个名为web的守护容器,把主机的src/webapp目录挂载到容器的/opt/webapp目录下,该容器执行的程序是app.py

数据卷也可以是一个文件 $sudo docker run -rm -it -v ~/.bash_history:/bash_history ....

数据卷权限

数据卷默认权限是可读写,如果想把权限改成只读,则把权限指定为ro

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

数据卷容器

如果我们有一些持续更新的数据需要在容器间共享,最好创建数据卷容器。数据卷容器就是一个正常的容器,专门用来提供数据供其它容器挂载的。

创建一个数据卷容器dbdata

$ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container

在其它容器中使用 --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

一个数据卷容器可以被多个容器挂载,挂载的容器被删除后,数据卷容器不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着的容器时使用docker -rm -v 目录来指定同时删除关联的容器。这可以让用户在容器之间升级和移动数据卷。

备份

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

首先创建一个容器挂载dbdata数据卷,把当前路径挂载到容器的/backup,容器启动了就使用了tar命令来将dbdata卷备份为本地的/backup/backup.tar

恢复

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

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

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

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