Docker 数据管理
在Docker内部以及容器之间管理数据,在容器中管理数据主要有两种方式
数据卷
数据卷容器
一、数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:
数据卷可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新,不会影响镜像
卷会一直存在,直到没有容器使用
数据卷的使用,类似于Linux下对目录或文件进行mount。
1.创建一个数据卷
在用 docker run命令的时候,使用-v标记来创建一个数据卷并挂载到容器里。在一次run中多次使用可以挂载多个数据卷。
下面创建一个web容器,并加载两个数据卷到容器的/webdata1和/webdata2目录
首先在本地创建两个目录/tmp/webdata1和webdata2
然后将数据卷挂载到容器上去
# docker run -t -i --name datac -v /tmp/webdata1:/webdata1 -v /tmp/webdata2:/webdata2 ubuntu:14.04 /bin/bash
可以看到在容器内自动创建了webdata1和webdata2这两个目录的,-v可以多次使用,-v后面接的是宿主机的目录:容器中的目录
2.查看数据卷的信息
使用docker inspect <container id>或docker inspect <container NAMES>查看datac容器中的数据卷信息
# docker inspect c60b21d79e3f
3.验证是否挂载成功
然后进入容器,在数据卷里写入数据,然后在宿主机查看是否存在信息
创建一个test.txt文件
然后去宿主机的/tmp/webdata1/下查看是否存在该文件
如图,发现是有该文件的,说明成功了
4.数据卷权限
挂载的数据卷默认是可读可写权限RW,但是我们可以限制该权限
可以在启动容器时,限制为只读权限(ro->onlyread)
创建目录mkdir /tmp/readonlydataweb
以只读的方式挂载到容器
# docker run -t -i --name datacro -v /tmp/readonlydata:/rodata:ro ubuntu:14.04 /bin/bash
然后尝试在容器的rodata目录创建文件,发现是不允许的
二、数据卷容器
如果我们有一些持续更新的数据需要在容器之间共享,那最好创建数据卷容器。数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
1.创建一个命名的数据卷容器dbdata
数据卷容器创建方法跟普通容器一样,只需要指定宿主机的一个文件夹作为数据卷即可,使用docker create命令创建但不启动数据卷容器
# docker create -v /tmp/webdata1 --name dbdata ubuntu:14.04 /bin/true
2.创建其他容器来挂载数据卷容器dbdata
在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷。
创建db1容器和db2容器,挂载数据卷容器dbdata:
# docker run --volumes-from dbdata --name db1 -i -t ubuntu:14.04 /bin/bash
# docker run --volumes-from dbdata --name db2 -i -t ubuntu:14.04 /bin/bash
3.验证
在db1容器中创建db1.txt文件,在db2容器中创建db2.txt文件
db1:
# touch /tmp/webdata1/db1.txt
db2:
# touch /tmp/webdata1/db2.txt
然后分别查看/tmp/webdata1/目录下的文件
彼此之间已经有了共享文件
三、数据卷容器的备份、恢复、迁移
可以利用数据卷对其中的数据进行进行备份、恢复和迁移。
1.备份
# docker run --volumes-from dbdata -v /tmp/backup:/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata
# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata
$(pwd)当前目录
容器启动后,使用了 tar命令来将dbdata卷备份为本地的/backup/backup.tar。
# docker run --rm --volumes-from dbdata -v /tmp/backup:/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata
完成备份操作后容器销毁
2.恢复
如果要恢复数据到一个容器,首先创建一个带有数据卷的容器 dbdata2
# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后创建另一个容器,挂载dbdata2的容器,并使用解压备份文件到挂载的容器卷中
# docker run --volumes-from dbdata2 -v /tmp/backup:/backup busybox tar xvf /backup/dbdata.tar
Docker的数据管理在这里就基本完成了
登录 | 立即注册