1.数据卷说明
1)数据卷特性
2)数据卷意义
3)类型
2.数据卷挂载
我们绑定之后 每次删除容器之后 数据还有残留 所以我们删除的时候加入一个-v 选项
就可以把数据卷也删除
docker rm -f -v
注意 一个容器 你给他指定了管理卷 他启动的时候 又给他指定了 绑定卷
管理卷的优先级 大于绑定卷 !!!!!
1)绑定卷
1.指定目录挂载
使用一个参数 -v
docker run -it tomcat11 -v /dd/:/ss/ tomcat:v1.0 /bin/bash# 把容器里的ss目录挂载到本机的dd目录 同时进入容器(使用-it 进入交互式在容器内使用/bin/bash 命令 )
如果宿主机 没有这个目录 他运行容器的时候就会自动帮你创建
查看 使用 docker inspect 容器名字|ID
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
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 内的数据还是存在的
小结
数据卷之间的关系 (互相拷贝)
数据卷容器的生命周期 一直持续到没有容器使用为止
# 只要 你有容器 还在使用这个数据卷 他就不会被删除
但是你一旦持久化到本地以后 是不会删除的
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 进入主线,性能和稳定性优异,第一选择
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

