Docker存储

本文详细介绍了Docker中两种主要的数据存储方式:由storagedriver管理的镜像层和容器层,以及datavolume。深入探讨了bindmount与dockermanagedvolume的特点与使用场景,并对比了二者在容器间数据共享方面的不同。

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

docker存储

Docker 为容器提供两种存储数据的方式

  • 由storage driver管理的镜像层和容器层

  • data volume

storage driver

  • 容器有最上面一个可写的容器层,以及若干只读的镜像层组成,容器的数据就存储在这些层中。

    • 新数据会直接写在最上面的容器层中

    • 修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中国,镜像层保持不变

    • 如果多个层中有文件名相同的文件名,用户只能看到最上面的那层文件

Data Valume

Data Volume 本质上是Docker Host文件系统中的目录文件。能够直接被mount到容器的文件系统中。

Docker 提供两种类型的volume:bind mountdocker managed valume

  • bind mount

    • bind mount是将host上已存在的目录或文件mount到容器中

    #通过-v将其mount到httpd容器中
    docker run -d -p 80:80 -v ~/htdocs:/usr/local/apache2/htdocs httpd
    #-v的格式为 <host path>:<container path>
    • 使用场景:单个文件的场景是:只需要向容器中添加文件,不希望覆盖整个目录

    • 优缺点:bind mount的使用直观高效,易于理解,但是也有不足的地方:bind mount需要指定host文件系统的特定路径,这就限制了容器的可移植性,当需要将容器移植到其他host需要指定host文件系统的特定路径,这就限制了容器的可移植性。

  • docker managed valume

    Docker managed volume 与bind mount在使用上最大的区别是不需要指定mount源,指明mount point 就行了

    docker run -d -p 80:80 -v /usr/local/apache2/htdocs httpd
    #通过-v告诉docker需要一个data volume,并将其mount 到 /usr/local/apache2.htdocs
    #host上会固定在/var/lib/docker/volumes/**************/_data
    • 容器和host之间的共享

      • Bind mount

      • Docker managed volume

    • 容器和容器之间的共享

      • 第一种方法是将共享数据放在bind mount 中,将其mount到多个容器

      • volume container

        • 专门为其他容器提供volume的容器。它提供的卷可以是bind mount,也可以是docker managed volume

          docker create --name vc_data \

          Bind mount 存放web server的静态问价

          docker managed volume 存放的一些实用工具

        • 其他容器可以通过--volume-from 使用vc_data这个volume container

          docker run --name web1 -d -p 80 --volume-from vc_data httpd
          docker run --name web2 -d -p 80 --volume-from vc_data httpd
          docker run --name web3 -d -p 80 --volume-from vc_data httpd
        • Data-packed volume container

          • 将数据打包起来到镜像中,然后通过docker managed volume共享

            # Dockerfile
            FROM busybox:latest
            ADD htdocs /usr/local/apache2/htdocs
            VOLUME /usr/local/apache2/htdocs
            #创建镜像
            docker build -t datapacked .
            #用新镜像创建data-packed volume container
            docker create --name vc_data datapacked
            #启动httpd容器并使用data-packed volume container
            docker run -d -p 80:80 --volume-from vc_data httpd

数据共享

不同的bind mountdocker managed volume
volume位置可任意指定/var/lib/docker/valumes/...
对已有的mount point的影响隐藏并替换为volumes原有数据复制到volume
是否支持单个文件支持不支持
权限控制可设置为只读默认为读写权限无控制,只能为读写权限
移植性移植性弱,与host path绑定移植性强,无需指定host 目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值