三、数据管理
3.1数据卷
数据卷是一个供容器使用的特殊目录,绕过文件系统,特性如下:
- 可在容器之间重用和共享
- 对数据卷修改会立即生效
- 更新数据卷不会影响镜像
- 卷一直存在,直到没有容器使用
创建一个数据卷并挂载
命令:docker run -d -P --name [容器名称] -v [数据卷挂载位置] [镜像名称] [运行的程序]
参数:
-v、参数可以在容器内创建一个数据卷,多次使用该参数可以创建多个数据卷。本地目录文件会同步到数据卷,数据卷内容不会同步到本地。
-P、允许外部访问容器需要暴露的端口
-d、后台运行,并返回容器ID
挂载本地一个目录到容器中去作为数据卷,目录不存在会自动创建。挂载后用户可以放置一些程序到本地目录,在docker中直接使用
命令:docker run -d -P --name [容器名称] -v [本地目录绝对路径]:[数据卷挂载位置] [镜像名称] [运行的程序]
避免权限问题,最好让docker自动创建
在数据卷后面添加:ro后,在容器内将无法修改数据,在容器外部修改不影响
3.2数据卷容器
数据卷容器就是一个普通的容器,专门提供数据卷供其他容器挂载使用
- 创建一个数据容器dbdata,并在根目录下挂载一个data目录。命令:docker run -it -v /data --name dbdata ubuntu
- 创建一个容器db1,挂载dbdata容器中的data卷。命令:docker run -it --volumes-from dbdata --name db1 ubuntu
- 可以创建更多的容器,用相同的方式来挂载数据容器,相互之间任何修改都可见
使用--volumes-from参数挂载的数据卷的容器自身并不需要保持运行状态
3.3利用数据卷容器迁移数据
原理:通过一个数据卷同时挂载本地文件夹和数据卷容器
- 启动数据卷容器,挂载一个数据卷data到根目录。命令:docker run -it -v /data --name dbdata ubuntu
- 启动一个worker容器,挂载数据卷容器的同时挂载本地目录到/backup下。命令:docker run -it --volumes-from dbdata -v /root/databackup:/backup --name worker ubuntu
- 将数据卷容器中的数据备份到/backup目录下即可。命令:tar cvf /backup/backup.tar /data
- 宿主机上就可以看到备份下来的文件
数据恢复和备份原理一样