Docker storage drivers

Storage drivers 与 Docker volume


storage drivers

Docker使用storage drivers用来存储镜像层,并将数据存储到容器的可写层,但是容器的可写层不是持久性的(比如容器发生重启 、删除)数据跟随丢失,适合保存在容器运行时产生的临时数据文件

storage drivers优化了存储空间的效率(取决于你使用的什么storage drivers)storage drivers使用了 copy-on-write filesystem,但是它的效率还是无法与native file system的性能相比

特别是遇到写入密集型应用程序(write-intensive applications),比如数据库类型的应用在存储数据时,对存储的性能开销有一定影响,特别是遇到已有的数据已经存在了只读层(particularly if pre-existing data exists in the read-only layer)

Docker volume

针对上面写入密集型应用程序,可以使用docker volume保存写入密集数据,数据的持久有效性大于容器的生命期(container‘s  lifespan)

而且 volume的读写性能高于docker overlayFS

总结

  1. storage drivers是docker存储驱动接口,主要功能用来管理镜像层内容变更与容器writable layer的写操作

  2. Docker volume 实际是外接存储个逻辑卷(文件系统是操作系统所指定)

imges and  layers


  • 一个docker images是由一个或者多个layers所组成,镜像的每个层可以看作成Dockerfile的一条指令,如下

    # syntax=docker/dockerfile:1
    FROM ubuntu:18.04
    LABEL org.opencontainers.image.authors="org@example.com"    //LABEL只是修改镜像中的元数据,并不会新生成一个镜像层
    COPY . /app
    RUN make /app
    RUN rm -r $HOME/.cache
    CMD python /app/app.py

  • 镜像是由多个镜像层堆叠形成的,当创建一个新的container时,就会生成一个writable layer(可写层),通常把这层称之为Container layer,这一层通常位于镜像层最顶层的上一层

什么是镜像顶层,就是在构建镜像时,Dockerfile的最后一条指令即为镜像的顶层

  • 容器层

什么是容器层,在容器运行时所有的修改操作(换而言之,就是容器运行时发生文件变化)通常指生成新文件、修改已存在的文件、删除文件所在的层

 

 Container and layers


Container与images的主要区别在于顶层的writable layer,所有写入容器的操作(新生成文件、修改文件)都存储在writable layer,writable layer随容器删除面随之删除, 但是底层的镜像则保持不变

每个Container都有独自的writable layer,所有修改操作都存储中这一层(container layer),多个容器可以共享访问同一个underlying image并且有自己的数据状态,下图展示多个容器共享一个镜像


 

 Container size on disk


查看运行容器所使用空间,可以执行docker ps -s查看,但是会看到二个不同的SIZE列,含义如下

  1. SIZE 统计在容器运行时,在writable layer发生的文件变化SIZE

  2. virtual size 统计城容器运行时,使用的read-only image data + container wirtabl layer的总和

    • 多个容器共享同样镜像数据

    • 二个或者多个容器使用同一个镜像(share 100 of the read-only data)

    但是还有一种情况是,二个容器使用不同的镜像,但是二个镜像会有公共镜像层,因为很难统计出容器在运行时真实使用空间大小,通常virtaul size会高估一点,但是不代表他实际的使用量

除此之外,SIZE&virtaul size还不统计以下产生的磁盘空间

  • 使用logging-driver存储的日志文件

  • docker volume产生的文件

  • 内存写入到磁盘的文件

  • Checkpoints

posted @ 2022-05-22 13:21  MacoPlus  阅读(337)  评论(0编辑  收藏  举报