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 容器的镜像可写层数据存在哪里?内存?硬盘?