存储卷介绍
1、Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层
2、如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本依然存在,只是已经被读写层中该文件的副本所隐藏,此即"写时复制(COW)"机制
关闭并重启容器,其数据不受影响,但删除Docker容器,则其更改将会全部丢失
存在的问题
1、存储于联合文件系统中,不易于宿主机访问;
2、容器间数据共享不便
3、删除容器其数据会丢失
解决方案:卷
卷是容器上的一个或多个目录,此类目录可绕过联合文件系统,与宿主机上的某目录绑定关联
Volume于容器初始化之时即会创建,由base image提供的卷中的数据会于此期间完成复制
Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时既不会删除卷,也不会对哪怕
未引用的卷做垃圾回收操作
Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同;
1、绑定挂载卷
指向主机文件系统上用户指定位置的卷
2、docker管理的卷
Docker守护进程在Docker所拥有的主机文件系统上的一部分创建托管卷
创建数据卷
docker管理的卷
#docker管理的卷
[root@xiaomao ~]# docker run --name mbbox5 -it -v /mydata busybox
/ # ls
bin dev etc home mydata
#查看创建好的数据卷
[root@xiaomao ~]# docker volume ls
DRIVER VOLUME NAME
local 3e049f1ed75e360517ae31ce7e48d052a4586aba58525eb66c236f4b2ef60e9c
local 6de1a46764fb6c58481c1341258b7863fa068fe9aefa8076074553bd38d4bdac
local 6f9442a316b723c8c08770227192b3d39614c5e91c2594998b23a6f9a78be7a3
local 80a45333ed19da68b211f925050a06e8eb3116fc159f9e71cfd4462bc3b11ebb
#查看mbbox5容器在宿主机挂载卷的具体路径
[root@xiaomao ~]# docker container inspect mbbox5
"Mounts": [
{
"Type": "volume",
"Name": "6de1a46764fb6c58481c1341258b7863fa068fe9aefa8076074553bd38d4bdac",
"Source": "/var/lib/docker/volumes/6de1a46764fb6c58481c1341258b7863fa068fe9aefa8076074553bd38d4bdac/_data",
"Destination": "/mydata",
#开始测试宿主机与容器的存储是否相通
#宿主机
[root@xiaomao ~]# cd /var/lib/docker/volumes/6de1a46764fb6c58481c1341258b7863fa068fe9aefa8076074553bd38d4bdac/_data
[root@xiaomao _data]# echo "hello world" >> 2.txt
#进入容器查看
[root@xiaomao ~]# docker run --name mbbox5 -it -v /mydata busybox
/ # cd mydata/
/mydata # ls
1.txt