目录
什么是容器数据卷
特点
挂载方式
1、命令行挂载
2、具名和匿名挂载
什么是容器数据卷
docker的理念是将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了,为了能够保存数据,在docker容器中使用卷。
通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。
比如,数据存放在容器中,如果将容器删除,数据就会丢失。如果有多个容器,那么它们也可能发生这种情况。所以容器间需要一个数据共享的技术,将容器中产生的数据同步到本地,即将容器内的目录挂载到Linux上,这就是容器数据卷。
特点1:数据卷可以在容器之间共享或重用数据
2:数据卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
挂载方式 1、命令行挂载1、docker run -it -v [宿主机绝对路径目录]:[容器内目录] 镜像名
这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享。如果此时在其中一边进行 *** 作,另一边就会有相应的 *** 作。如果我们不知道数据卷是否挂载成功时,我们可以通过以下方式来检查数据卷的挂载结果。
例如:
[root@iZbp1dlz0y8paqewduhmx6Z home]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@229584a18597 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv
2、启动后通过docker inspect 容器id 查看挂载信息
docker inspect 容器id
.......
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
3、然后在容器内部新建一个test.java文件,在外层虚拟机中查看,发现也多了一个test.java文件。
4、虚拟机中在test.java中写入一句话,然后在容器中查看该文件,内容居然神奇的一致,也可以叫双向绑定。
5、docker stop 容器id 把容器停止后,然后在宿主机上修改文件,重启容器,发现数据同步。
用docker attach 容器id 进入,查看文件,数据同步了。
2、具名和匿名挂载docker -run -v 容器内路径
1、不需要给宿主机起名字,直接写容器内路径启动容器即可
2、查看挂载卷名字 docker volume ls 所有的挂载信息都可以用在个命令查看
[root@iZbp1dlz0y8paqewduhmx6Z /]# docker volume ls
DRIVER VOLUME NAME
local 0a3b73c05ac2c5aa969cf59986cba4a06f36409ee739231602c7ac162b34d871
3、具名挂载 docker run -d -P --name 起个名称 -v juming-centos:/home 镜像名称
[root@iZbp1dlz0y8paqewduhmx6Z home]# docker run -d -P --name centos2 -v juming-centos:/home centos
db19deb1d8e5c1f8bf542b92da1fae2c57674c1e447dd06ea4bee8a9639626db
[root@iZbp1dlz0y8paqewduhmx6Z home]# docker volume ls
DRIVER VOLUME NAME
local 0a3b73c05ac2c5aa969cf59986cba4a06f36409ee739231602c7ac162b34d871
local juming-centos
4、查看卷具体的位置 docker volume inspect 具名
[root@iZbp1dlz0y8paqewduhmx6Z home]# docker volume inspect juming-centos
[
{
"CreatedAt": "2022-05-06T22:00:54+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-centos/_data",
"Name": "juming-centos",
"Options": null,
"Scope": "local"
}
]
[root@iZbp1dlz0y8paqewduhmx6Z home]#
说明:所有 docker容器内的卷,没有指定目录都是在/var/lib/docker/volumes/xxx/_data",我们通过具名挂载可以方便的找到我们的一个卷,大多数情况都是用具名挂载。
5、挂载增加权限设置后面添加:ro只读 rw可读可写。
ro:只能通过宿主机 *** 作,容器内部无法 *** 作。
# 只读
docker run -d -P --name centos2 -v juming-centos:/home:ro centos
# 可读可写
docker run -d -P --name centos2 -v juming-centos:/home:rw centos
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)