首页 > 其他分享 >docker-Volume(四)

docker-Volume(四)

时间:2022-11-05 19:33:06浏览次数:52  
标签:容器 宿主机 Volume 挂载 docker 数据 目录

Volume原理

首先我们需要知道Docker的文件系统是如何工作的。

1,Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层。

2,如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。

3,当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)

4,为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。

Docker管理数据的方式有两种:

什么是数据卷

数据卷是一个特殊的文件或者目录,它将宿主机文件或者目录直接映射进容器中,可供一个或多个容器使用。

容器数据卷设计的目的就是为了 数据的持久化,它完全独立与容器的生命周期。

因此,容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。

通过docker run -v命令可以将数据卷挂载到对应的容器目录空间,进行文件读取

数据卷特性

1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便

2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作

3. 对数据卷的更新不会影响镜像,解耦了应用和数据

4. 卷会一直存在,直到没有容器使用,可以安全地卸载它

数据卷绑定方式

volumes

Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式

bind mounts

指定宿主机目录方式,意为着可以存储在宿主机系统的任意位置;(比较常用的方式

但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。

这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。

tmpfs

挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式

数据卷挂载使用方式

//注意:如果出现Docker挂载宿主机目录显示cannot open directory .:Permission denied

解决办法:在挂载目录后面 多加一个--privileged=true参数即可

匿名目录挂载

属于volumes绑定方式

将挂载到/var/lib/docker/volumes  目录名字将会是一串随机数

docker run -it -v /centosVolume [container]

仅指定名字挂载

属于volumes绑定方式

将挂载到/var/lib/docker/volumes/myVolme/_data 也是挂载到了volumes目录 但是下级目录是我们指定的名字

docker run -it -v hostVolume:/myVolume [container]

指定目录挂载

属于bind mounts绑定方式

将挂载到我们指定的目录/root/hostVolume

docker run -it -v /root/hostVolume:/containerVolume [container]

docker file方式

生成镜像容器 内部将有这2个目录,并跟宿主机的进行绑定,使用的是volumes绑定方式

#基于centos镜像进行构建
FROM centos

#数据卷只能指定容器数据卷,不能指定宿主机数据卷,英文并不能够保证在所有的宿主机上都存在这样的特定目录。
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]

#以 /bin/bash方式启动
CMD /bin/bash

 

管理数据卷相关命令

创建数据卷

docker volume create edc-nginx-vol // 创建一个自定义容器卷

使用通过

docker run -d -it --name=edc-nginx -p 8800:80 -v edc-nginx-vol:/usr/share/nginx/html nginx

查看所有容器卷

docker volume ls // 查看所有容器卷

查看指定容器卷详情信息

docker volume inspect edc-nginx-vol // 

删除容器卷

 docker volume rm edc-nginx-vol

 

标签:容器,宿主机,Volume,挂载,docker,数据,目录
From: https://www.cnblogs.com/LQBlog/p/16860907.html

相关文章