docker 存储学习

本文详细探讨了容器中的数据存储类型——datavolume,包括bindmount与dockermanagedvolume的区别,以及如何实现主机与容器、容器间的数据共享。重点介绍了数据持久化和迁移问题,并通过实例解析了数据-packedvolumecontainer的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 目录

概述

data volume

数据共享

思考

1 概述

容器有数据要存放,主要有两种类型,容器的镜像可写层和data volume

容器的镜像可写层只存容器临时数据,容器删了后,容器的镜像层的数据也一起被删了,还没搜到这可写层存在物理机的哪里,内存还是硬盘

data volume存永久化数据,硬盘会有对应的文件,与容器的永久化存储数据对应。data volume主要分了两类 bind mount和docker managed volume

2 data volume

2.1 bind mount

功能:将主机的文件mount到指定容器

例子:docker run -d -p 80:80 -v /root:/usr/local/apache2/htdocs:permission httpd

注意:

-v host_path:container_path,进入容器后,容器该目录下的文件会被隐藏,container_path实际看到的是host_path的文件

permission表示对host_path目录下文件的操作权限,比如permission为ro表示容器仅可读取该目录文件无法修改

局限性:

-v的路径为显示路径,容器迁移时不同主机不一定存在mount的路径,这样可能会导致容器迁移失败等问题。解决方法?docker managd volume

2.2 docker managed volume

与bind mount区别:

不需要指定主机的mount path,只需要指定容器的mount path

若host mount path已存在且路径下已有文件,bind mount将容器的目录内容换为host的mount path下的文件,docker managed volume将容器目录下已有文件复制至volume

3 数据共享

3.1 主机与容器数据共享

docker cp host_path container_id:container_path

可在容器和主机间复制,支持双向

3.2 容器之间数据共享

1 多个容器同时mount主机的某个路径实现共享

2 volume container

定义 一种容器,给其他容器提供volume的容器

创建 docker create --name vc_data -v host_path:/usr/local/apache2/htdocs -v /other/useful/tools busybox

注意

1 可以有多个-v

2 用create而不是run,因为不需要run

其他容器如何使用这个volume container?

docker run --name weba -d --volumes-from vc_data httpd

3 data-packed volume container

区别

1 与volume container不同的是,持久化数据存放于容器中而不是映射主机的路径

实现

dockerfile中使用volume container_path,将容器路径mount至镜像,然后创建镜像,用镜像再创容器,这容器就可以叫data-packed volume container,其他容器可以用--volumes-from使用这个容器的volume,最终存储会存储到这个data-packed volume container中

20 思考

1 容器的镜像可写层数据存在哪里?内存?硬盘?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值