栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

docker 容器数据卷

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker 容器数据卷

目录

什么是容器数据卷

特点

挂载方式

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 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号