Docker技术知识:Docker 数据管理
1.数据卷
数据卷是一个可供容器使用的特殊目录,有如下特性:
数据卷可以在容器之间共享和重用
数据卷修改会立即生效
数据卷的更新不会影响镜像
如果有容器使用数据卷,该卷会一直存在
准备工作:
创建一个目录,并在目录里面创建文件,文件内写入内容。
[root@bogon ~]# cd /tmp/
[root@bogon tmp]# mkdir webapp
[root@bogon tmp]# cd webapp/
[root@bogon webapp]# echo '数据卷' > 1.txt
[root@bogon webapp]# cat 1.txt
数据卷
[root@bogon webapp]#
1.1在容器内创建数据卷
在使用docker run的命令时,使用 -v 标记可以在容器内创建一个数据卷,并且可以指定挂在一个本地已有的目录到容器中作为数据卷:
创建启动app1容器并挂载数据卷,注意,此时是在tmp目录下进行的操作
echo ${pwd} 命令标识当前目录
[root@bogon tmp]# docker run -d --name app1 -it -v ${pwd}/webapp:/root/webapp centos bash
通过目录跟容器内建立了一层关系,数据卷发生变化后,容器内和容器外都会随之发生改变。例如容器挂载一个文件,当容器挂了后,文件不会丢失。
注意:默认挂载的数据卷的权限是rw(可读写),如果要求ro(只读),则需要加上对应的ro参数,命令可改为:
docker run -d --name app1 -it -v ${pwd}/webapp:/root/webapp:ro centos bash
# 创建启动app1容器并挂载数据卷,前者/tmp/webapp是本机路径,后者/tmp/webapp1是容器路径
[root@bogon webapp]# docker run -d -it --name app1 -v /tmp/webapp:/tmp/webapp1 centos bash
# 进入容器找到/tmp目录可查看到已挂载的数据卷
[root@bogon webapp]# docker exec -it app1 bash
[root@11755ef11dc1 /]# cd /tmp/
[root@11755ef11dc1 tmp]# ll
total 4
-rwx------. 1 root root 836 Mar 5 17:36 ks-script-eC059Y
drwxr-xr-x. 2 root root 32 Aug 13 06:30 webapp1
-rw-------. 1 root root 0 Mar 5 17:34 yum.log
# 数据卷目录与容器内目录有映射关系,所以不管是在容器内部修改数据卷还是在外部修改数据卷,相对应的数据卷都会发生改变。
# 在容器内修改文件数据后,exit退出容器,进入本机路径查看文件,会发现文件也发生了变化.
# 只读权限是无法写入数据的
2.数据卷容器
数据卷容器用于用户需要在容器间共享一些持续更新的数据,数据卷容器专门提供数据卷供其它容器挂载使用。
2.1 创建数据卷容器
Example:
创建数据卷容器db1
docker run -d --name db1 -v /dbdata -ti centos bash
创建容器db2与db1共享dbdata的数据
docker run -d --name db2 --volumes-from db1 -ti centos bash
# 创建数据卷容器db1
[root@bogon tmp]# docker run -d --name db1 -v /tmp/dbdata/ -it centos bash
# 创建数据卷容器db2,使用db1的数据卷
[root@bogon tmp]# docker run -d --name db2 --volumes-from db1 -it centos bash
# 在容器db1和容器db2任意一个容器修改/tmp/dbdata/的内容,在两个容器内均生效
2.2 数据卷容器的删除
如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删除最后一个还挂载它的容器时显示使用docker rm -v 命令指定同时删除关联的容器。可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
2.3 数据卷容器的备份
使用下面的命令来备份dbdata数据卷容器内的数据卷:
docker run --volumes-from /tmp/dbdata -v ${PWD}:/backup --name worker centos tar cvf /backup/backup.tar /tmp/dbdata
说明:
利用centos镜像创建一个容器worker。
使用``--volumes-from /tmp/dbdata`参数来让worker容器挂载dbdata的数据卷。
使用${pwd}:/backup参数来挂载本地目录到worker容器的/backup目录。
worker启动后,使用tar命令将/tmp/dbdata下的内容备份为容器内的/backup/backup.tar。
2.4 数据卷容器的恢复
如果恢复数据到一个容器,可以参照下面的操作。首先创建一个带有数据卷的容器dbdata2:
docker run -d -v /dbdata --name dbdata2 centos /bin/bash`
然后创建另一个新的容器,挂载dbdata2的容器,并使用tar命令解压备份文件到挂载的容器卷中即可:
docker run --volumes-fromd bdata2 -v ${pwd}:/backup centos tar xvf /backup/backup.tar

教程库站长:庄宇光 QQ:1881294
投诉及建议电话: 18559313275
网站ICP备案号: 闽ICP备19015982号-4 公安网备案号:闽公网安备35060202000406号
文章投稿及版权申诉联系邮箱 1: vip@jiaochengku.com 联系邮箱 2: vip@ufo.work