1.是什么
我们对数据的要求希望是持久化的,且容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了,为了能保存数据在docker中我们使用卷。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
2.容器创建数据卷
指令: docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash
多个容器数据卷docker run -it -v /宿主机目录:/容器内目录 -v /宿主机目录:/容器内目录 centos /bin/bash
这样子,宿主机的这个目录和容器的这个目录就会数据同步,两个目录里面的内容同步保持一致
在两边发生的变更都会同步到另一边
即便容器停止了,对宿主机目录进行修改,容器内的目录也会同步
2.1示例
1)启动centos容器,并且创建容器卷
宿主机目录为:/usr/local/myData,容器内的目录为/usr/local/myContainerData,这两个目录的数据会同步(目录随意,不存在的会自动创建)
2)进入容器查看目录
发现文件夹myContainerData
3)退出容器,查看宿主机目录
发现文件夹myData,在文件夹创建文件11.txt
4)重新进入容器,查看myContainerData目录,发现存在11.txt文件
说明两个文件夹数据已同步
3.带权限创建数据卷
指令:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
ro标识read only
这样子创建的,容器这边的目录只读,不允许编辑
4.使用dockerfile创建数据卷
上面我们创建一个容器数据卷,那么创建多个该怎么办呢?使用dockerfile来实现
1)创建文件Dockerfile
2)写入内容
# volume test FROM centos:6.8 VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success1" CMD /bin/bash
FROM centos:6.8表示,表示继承自centos:6.8
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] 这里是定义数据卷,定义了两个数据卷,只有容器里面的目录没有宿主机的目录,会在宿主机自动生成对应的目录
CMD echo "xxx" 表示执行命令打印内容
3)执行命令build
docker build -f /usr/local/Dockerfile -t zzyy/centos .
注意,命令最后面有个空格和点
执行完成后查看镜像,新的镜像已生成
4)启动该镜像,进入容器查看,发现这两个目录
5)查看日期目录对应的数组及目录
docker inspect 容器id
可以看到对应的宿主机的目录
5.容器之间传递数据卷
1)创建并切动一个容器,且创建数据卷
容器名称为mycentos2,宿主机目录:/usr/local/myData,容器目录 /usr/local/myContainerData
在myContainerData创建文件11.txt
2)创建第二个容器,继承第一个容器
docker run -it --name mycentos3 --volumes-from mycentos2 centos:6.8
这样子,第二个容器会继承第一个容器的数据卷的配置,它的目录/usr/local/myContainerData也和宿主机的目录/usr/local/myData同步
进入第二个容器,发现11.txt文件,说明已同步
后面,即便第一个容器停止了,删除了,也不影响第二个容器的数据卷的配置,数据卷依旧有效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?