容器文件系统
overlay文件系统, 如何理解?
场景: 一个宿主机上需要运行100个容器
解释:如果一个容器镜像文件大小是500M , 那么100个容器需要50GB空间, 在这50GB空间中, 库文件基本都是一样的, 造成巨大冗余浪费。
理想状态:
正是为了有效地减少磁盘上冗余的镜像数据,同时减少冗余的镜像数据在网络上的传输,选择一种针对于容器的文件系统是很有必要的,而这类的文件系统被称为 UnionFS 。
OverlayFS
UnionFS 类似的有很多种实现,包括在 Docker 里最早使用的 AUFS,还有目前我们使用的 OverlayFS。前面我们在运行df的时候,看到的文件系统类型"overlay"指的就是 OverlayFS。
OverlayFS详解
OverlayFS 有两层,分别是 lowerdir 和 upperdir。lowerdir 里是容器镜像中的文件,对于容器来说是只读的;upperdir 存放的是容器对文件系统里的所有改动,它是可读写的。
从宿主机的角度看,upperdir 就是一个目录,如果容器不断往容器文件系统中写入数据,实际上就是往宿主机的磁盘上写数据,这些数据也就存在于宿主机的磁盘目录中。
当然对于容器来说,如果有大量的写操作是不建议写入容器文件系统的,一般是需要给容器挂载一个 volume,用来满足大量的文件读写。
小实验
启动一个容器查看磁盘使用:
[root@OTRS ~]# docker run -it centos bash
宿主机上df -h
在容器中写入一个10GB的文件, 再观察
由此可以证明, 往容器中写日志,其实就是向宿主机上写入内容。
备注:部分内容取自geektime