docker 容器数据卷

docker 容器数据卷,第1张

目录

什么是容器数据卷

特点

挂载方式

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 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/877103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存