1.数据卷说明

1)数据卷特性

image.jpeg

2)数据卷意义

image.jpeg
image.jpeg

3)类型

image.jpeg

2.数据卷挂载

我们绑定之后 每次删除容器之后 数据还有残留 所以我们删除的时候加入一个-v 选项
就可以把数据卷也删除
docker rm -f -v
注意 一个容器 你给他指定了管理卷 他启动的时候 又给他指定了 绑定卷
管理卷的优先级 大于绑定卷 !!!!!

1)绑定卷 

1.指定目录挂载

使用一个参数 -v

  1. docker run -it tomcat11 -v /dd/:/ss/ tomcat:v1.0 /bin/bash
  2. # 把容器里的ss目录挂载到本机的dd目录 同时进入容器(使用-it 进入交互式在容器内使用/bin/bash 命令 )

如果宿主机 没有这个目录 他运行容器的时候就会自动帮你创建
查看 使用  docker   inspect  容器名字|ID
image.jpeg

2.具名和匿名挂载

(注意这和上边的指定目录挂载完全不一样)

匿名挂载

匿名挂载  
格式   -v 容器内路径 
[root@localhost volumes]# docker run  --name nginx01  -v /etc/nginx  -d nginx 
2c008620a81d3483def7b9b444ae6d8cd4ebded0cfdb0c86326290b49be04385
[root@localhost volumes]# 
[root@localhost volumes]# ls
a92d346c66e8af41f9dd166dd4ba5254751069902583b8a5b53901b556a6c307  backingFsBlockDev  metadata.db
[root@localhost volumes]# pwd
/var/lib/docker/volumes

查看 信息

[root@localhost volumes]# docker volume --help  
[root@localhost volumes]# docker volume  ls  #具名挂载可以使用这个命令来查看
DRIVER    VOLUME NAME
local     a92d346c66e8af41f9dd166dd4ba5254751069902583b8a5b53901b556a6c307

具名挂载

-v  卷名:容器内路径
[root@localhost volumes]# docker run -d  --name nginx02 -v nginxtest:/etc/nginx  nginx  
203d5a5ad9d63300e40d06581e13c622e0b9df523c2f5608b23e9e61500f5799
[root@localhost volumes]# docker volume ls   
DRIVER    VOLUME NAME
local     a92d346c66e8af41f9dd166dd4ba5254751069902583b8a5b53901b556a6c307
local     nginxtest     #注意上边的匿名挂载显示的是128位的ID号 下边的是具体的名字

 
查看信息  docker volume inspect  具名挂载名

[root@localhost volumes]#  docker volume  --help    #先查找一下都有哪些命令
Usage:  docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

[root@localhost volumes]# docker volume  inspect  nginxtest 
[
    {
        "CreatedAt": "2021-05-06T05:25:16+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginxtest/_data",
        "Name": "nginxtest",
        "Options": null,
        "Scope": "local"
    }
]

小结

1)无论是具命还是匿名挂载只要没有指定目录的情况再 都在 
/var/lib/docker/volumes/XXX/_data 目录下
  我们大多数情况下 还是使用的挂载 

2)确定是具名挂载还是匿名挂载,还是指定路径挂载!

-v  容器内路径         #匿名挂载
-v  卷名:容器内路径       #具名挂载
-v  /宿主机路径::容器内路径   #指定路径挂载!

3)通过-v容器内路径:ro|rw  改变读写权限

roreadonly     #只读
rwreadwrite  #可读可写
#一旦这个了设置了容器权限,容器对我们挂载出来的内容就有限定了!
docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
# ro只要看到ro就说明这个路径只能通过宿主机操作 容器内部无法操作

2) 管理卷

只要在 dockerfile 文件中加入一个 参数 然后启动之后 他就会创建一个数据卷
一般使用这种方法进行数据卷挂载的 挂载目录都在 /var/lib/docker/volumes
image.jpeg

3) 数据卷容器

需求: 想要两个容器 公用一个目录

解决方法 :两种

① 使用绑定卷

1) 使用指定目录 挂载 把他们的绑定目录都写成同一目录
2) 使用 匿名或者具名用户挂载

docker run  --name docker01   -v /etc/passwd    tomcat:v1.0 
docker run  --name docker02    --volumes-from  docker01    tomcat:v1.0

② 使用 unio volume 也就是使用一个参数 —volumes-from

/

命令 docker run   -it  --name roc --volumes-from  ContainerName   tomcat:v1.0

这个东西的意思是 这个容器的管理卷绑定的是 前边一个容器的管理卷 (就是写入dockerfile中的)

实例:准备3个容器 2.3容器使用1容器的管理卷

docker run  -it --name   docker01   tomacat:v1.0
docker run  -it --name   docker02   --volumes-from  docker01   tomacat:v1.0
docker run  -it --name   docker03   --volumes-from  docker01   tomacat:v1.0
#如果我们这个时候 把docker01 容器给停掉 或者删除  我们的docker2.docker3 内的数据还是存在的

小结

数据卷之间的关系 (互相拷贝)
image.jpeg
数据卷容器的生命周期 一直持续到没有容器使用为止
# 只要 你有容器 还在使用这个数据卷 他就不会被删除
但是你一旦持久化到本地以后 是不会删除的

3.存储驱动

1)概念(了解就行)

Docker 通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。 Linux 上可用的存储引擎有 AUFS、Overlay2、Device Mapper、Btrfs 以及 ZFS。顾名思义,每种存储引擎都基于 Linux 中对应的文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。 Docker 在 Windows 上仅支持 windowsfilter 一种存储引擎,该引擎基于 NTFS 文件系统之上实现了分层和 CoW[1]。、

Docker 存储驱动 ( storage driver ) 是 Docker 的核心组件,它是 Docker 实现分成镜像的基础
1、device mapper ( DM ):性能和稳定性存在问题,不推荐生产环境使
2、btrfs:社区实现了 btrfs driver,稳定性和性能存在问题
3、overlayfs:内核 3.18 overlayfs 进入主线,性能和稳定性优异,第一选择
image.jpeg

mount -t overlay overlay -olowerdir=./low,upperdir=./upper,workdir=./work ./merged
挂载 这三层 需要先创建目录
这三层的关系是 从上往下看的关系
下边的层级有了 上边也有 但是 上边有的会覆盖下边的
你可以 理解为一只眼睛 从merged 往下看
就是 overlay 的文件存储方式

2) 修改docker 的存储驱动 修改问overlay

echo "overlay" > /etc/modules-load.d/overlay.conf
cat /proc/modules|grep overlay
reboot
vim /etc/systemd/system/docker.service
--storage-driver=overlay