一、容器数据卷的介绍
- Docker可以将开发的应用和运行的环境一起打包形成容器运行,Docker容器产生的数据,如果不通过Commit生成一个新的镜像,使得这些数据成为镜像的一部分保存下来,那当容器删除时,数据自然也就没有了(相当于别人删除跑路),为了能够保存数据在Docker中我们使用数据卷。
- 卷就是目录和文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过union file system提供一些用于持续存储或共享数据的特性。(将docker容器内的数据保存进宿主机的磁盘中)
- 卷的设计目的就是数据持久化(类似于redis中的rdb和aof文件),完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂载的容器卷。
- 数据卷的特点:
数据卷可在容器之间共享或重用数据
数据卷的更改会直接生效
数据卷的更改不会包含到镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
二、数据卷的挂载
(1)修改镜像名和版本标签
(2) 挂载数据卷
(3)查看挂载信息
(4) 指定宿主机挂载目录
(5)查看名为text的Nginx容器的状态和挂载数据
(6)开启centos和Nginx两个终端
通过示例观察数据卷共享机制,会在宿主机与容器端之间多次切换,建议开启两个终端,
(7)验证挂载成功
分别查看宿主机和容器的根目录下的文件
#容器根目录多了一个app的目录
#宿主机下新建一个web目录
#在宿主机web目录下创建a.txt和b.txt文件对应的容器挂载目录中会出现相应文件
#在容器挂载数据下创建c.txt对应的宿主机目录中会出现相应文件
(8)创建数据卷,并设置权限
(9)在挂载目录下写入文件并 查看
三、通过 Dockerfile 挂载数据卷
1.添加内容并查看Dockerfile内容
2.通过该 dockerfile 创建文件
docker build -t volume .
3.运行并查看挂载信息
4.查看容器信息
四.数据卷容器
1. 启动名为 volume-container 的容器,此容器包含两个数据卷
docker run -it --name volume-container -v /volume1 -v /volume2 docker.io/centos
2.使用 ctrl+P+Q 组合键退出当前容器终端,查看挂载信息
docker inspect volune-container | grep volume
3.在宿主机中为数据卷添加文件以及文件内容
4.创建容器test1-container,用--volumes-from参数挂载volume-comtainer中的数据卷
ps:以上实例看出两个容器实现了数据共享
5测试(将数据卷容器删除,观察数据卷还能否正常工作)
(1)删除数据卷容器
(2)成功挂载数据卷
ps:测试成功 即使删除初始数据卷容器,只要有容器使用该数据卷,数据就不会消失
五.备份数据卷
1.创建一个 名为data-volume的centos 容器,并对其挂载两个数据卷var/volume1/和/var/volume2/
docker run -it --name data-volume -v /var/volume1 -v /var/volume2 docker.io/centos
2. 在挂载目录中创建文件并添加内容
3.备份数据卷,备份完后删除
4.同样方式对/var/volume2/a.txt 进行文件备份
5.解压文件并查看目录结构
6.仅用一条命令完成多个文件备份
六.数据卷的恢复与迁移
1.进入数据卷模拟数据丢失删除以上文件
(1)开始删除数据
(2)开始恢复数据(数据恢复成功)
2.迁移数据卷*
(1)新建容器并备份文件到新的容器数据卷
(2)退出到当前容器,将备份数据迁移到容器 new-container 中,
ps:数据迁移成功
(3)建议新容器创建时挂载的数据卷路径与先前备份的数据卷路径保持一致,否则会出现数据恢 复出现不全的情况
路径没有保持一致,备份之后发现只回复了 volume1 中的数据,volume2 中的数据没有恢 复,为了避免这种情况,可以修改-C 后面的路径
数据完整备份
七.管理数据卷
1.创建容器并挂载数据卷,再将容器删除查看数据
(1)运行容器,并为其载数据卷,并查看数据卷挂载目录
(2)不添加-v参数,删除容器(容器删除成功)
PS:以上实例,将挂载了数据卷的容器删除之后,容器挂载的数据卷还存在,
下面删除容器同时添加-v参数,删除该容器数据卷
(3)运行容器,并为其载数据卷,并查看数据卷挂载目录
(4)添加-v参数,删除容器(容器删除成功)
PS:也是实例在删除容器时添加了-v参数,数据卷也同时被删除,清理了无用的数据卷。节省磁盘空间
(5)创建容器命令中加入—rm参数,终止容器会自动删除容器及数据卷
ps:使用exit命令退出容器后,数据卷也被删除
2.命令管理
(1)creat 创建数据卷
(2)ls 列出数据卷
(3)inspect 显示一个或多个数据卷的详细信息
还可以在宿主机中使用docker inspect命令查看指定数据卷信息