本文摘自书籍《Docker技术入门与实战》
用户在使用Docker过程中,往往需要查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器内管理数据主要有两种方式:数据卷、数据卷容器。
数据卷
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用。
- 对数据卷的修改会立马生效。
- 对数据卷的更新不会影响镜像。
- 卷会一直存在,直到没有容器使用。
创建数据卷
在使用docker run命令时,使用-v标记可以在容器内创建一个数据卷。多次使用-v可以创建多个数据卷。
1. 容器内创建数据卷
首先拉取tomcat镜像(默认注册服务器:docker.io):
docker pull tomcat
拉取完成后查看:
docker images
启动并创建一个数据卷:
docker run -d -p 8080 --name tomcat -v /data tomcat
-d:容器保持运行
-p:指定监听端口
--name:容器名(这里是'tomcat')
-v:创建数据卷
/data:表示容器内目录(可任意指定,但要求为绝对路径),数据卷将挂载到这个目录下。
tomcat:表示镜像
2. 挂载宿主机目录作为数据卷
docker run -d -p 8080 --name tomcat -v /usr/local/volumn/tomcat:/data tomcat
/usr/local/volumn/tomcat:表示宿主机目录,此目录不存在会自动生成。
/data:表示容器目录
tomcat:镜像
上面的命令加载宿主机的/usr/local/volumn/tomcat到容器的/data目录,用例:进行测试,用户可以放置一些程序或数据到本地目录中,然后在容器内运行和使用。
docker挂载数据卷德默认权限是读写,可进行参数配置,例子:
docker run -d -p 8080 --name tomcat -v /usr/local/volumn/tomcat:/data:ro tomcat
上面的命令使得数据为只读(ro)
3. 挂载宿主机文件作为数据卷
根据上面一条创建很容易想到命令的样子:
docker run -d -p 8080 --name tomcat -v /usr/local/volumn/tomcat.log:/data.log tomcat
不推荐直接挂载文件到容器,而是挂载文件所在的目录到容器。
数据卷容器
如果需要在容器间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器其实就是一个普通的容器,专门用它提供数据卷供其他容器挂载。
首先创建一个容器且容器内创建数据卷,可以使用任意的镜像进行创建,无强制要求:
docker run -it -v /volumns --name volumns-container ubuntu
很显然,数据卷为/volumns,容器名为:volumns-container,镜像为:ubuntu
上面的命令并没有包含-d参数,意味着,数据卷德容器自身并不需要保持在运行状态度。
挂载数据卷到上面的容器目录:
--volumes-from volumns-container
将之前的命令中-v及其参数换成上面的样子即可。
利用数据卷容器迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以及实现数据迁移。
备份
docker run --volumes-from volumn-container -v /usr/local/volumn:/data --name cp ubuntu tar cvf /data/backup.tar /volumns
分析:
首先利用Ubuntu镜像创建一个名为cp的容器,使用–volumes-from volumn-container让cp容器挂载volumn-container容器的数据卷(volumns),使用-v /usr/local/volumn:/data挂载本地目录(/usr/local/volumn)到cp容器的/data目录,容器启动后,使用tar cvf /data/backup.tar /volumns命令将/volumns下的内容备份为容器内的/data/backup.tar即宿主机下的/usr/local/volumn/backup.tar。恢复
恢复数据到容器,操作如下:
首先创建一个带有数据卷的容器:docker run -v /data --name vol ubuntu
创建一个新容器,挂载到上面的容器vol,并使用untar解压备份文件到所挂载的容器卷中即可:
docker run --volumes-from vol -v /usr/local/volumn:/data ubuntu tar xvf /data/backup.tar