分层文件系统和卷装入

我无法理解如何使用卷存储将影响我的磁盘空间使用情况。

我有图像A这是一个基本的形象,并与我的应用程序需要的很多实用程序。 我有应用程序B和C,它们是从基本映像A生成的图像。它们安装不同的语言来运行我的两个不同的应用程序。 Image A是300MB,B和C是300MB。

如果我创build10个应用程序A和B的实例将使用多less磁盘空间?

另外,假设我正在为所有的容器安装一个NFS共享,容器中的任何应用程序/进程都只能将应用程序数据,日志等写入挂载的nfs共享中,所以似乎不会在容器内进行写操作。 装载点是/ var / www / html我的磁盘使用情况如何?

正如我目前了解,在第一种情况下,我的磁盘使用率将是(300MB的基本图像+ 600MB的两个应用程序图像,因此build立在900MB,我假设基础图像将被共享。从应用程序映像B和C创build的,它们每个写入100MB数据,然后我的总磁盘使用量将是900MB + 100MB(写入磁盘的净数据)*容器数量?

我怎么理解这个?

分层文件系统将重用父图像中的图层,因此,如果图像A是300MB,应用程序B和C每个是300MB,那么实际上这些应用程序容器正在添加接近0的磁盘空间,重用父图像的全部内容。 由于所有的数据都是外部存储的,而且不会写入容器的本地RW文件系统,所以可以随意旋转任意数量,只使用300MB的磁盘。

如果每个应用程序实际上增加了 300MB,而这些300MB与父应用程序和其他应用程序容器不同(docker使用caching,如果运行相同的命令,可以允许每个应用程序容器从其他应用程序容器重用),则最终每个图像显示为600MB,而实际使用的磁盘为900MB,父母为300MB,每个应用图像为300MB。

旋转每个容器不会添加到已使用的磁盘空间,直到该容器将文件写入本地卷或容器的RW层。

了解这个进入分层的文件系统devise。 该图像可能由多个图层组成,每个图层都被创build一次,并且可以被其他图像重用,一切都被存储为一个哈希的引用,并且只有当没有更多的哈希引用时,docker才能移除该图层docker rmi

将图像转换为容器(使用docker rundocker create )时,图像内容将作为只读图层进行装载,并在容器上安装RW图层,并在分层文件系统上安装任何卷。 一个卷的外部读取通过层,直到它与文件(或文件上的其他修改,如删除)达到一个。 所以如果文件没有被修改,它会从其中一个图像层读取,但是如果你在RW层创build它,你的读取会将其拉回。 这导致图像的概念是不可变的,而容器可以在容器的整个生命周期中存储它们自己的变化。 你可以在一个容器上运行一个docker diff来改变它的RW层。 这个差异是你在构build的每一步或在docker commit存储到图像层的内容。