
2. 通過Docker啟動(dòng)參數(shù)的--storage-opt選項(xiàng)來限制每個(gè)容器初始化的磁盤大小,如-storage-opt dm.basesize=80G 這樣每個(gè)容器啟動(dòng)后,根目錄的總空間就是80G。
但是我總覺得這樣的解決方式不夠優(yōu)雅,需要多步操作才能滿足需求,同時(shí),容器的空間還是被限制的,只是限制的大小變化而已。那有沒有更好的辦法呢? 讓我們繼續(xù)來爬資料,在Docker的官方網(wǎng)站上:
(https://docs.docker.com/engine/reference/commandline/dockerd/)

Docker在存儲(chǔ)驅(qū)動(dòng)方面支持 AUFS、Device Mapper、Btrfs、ZFS、 Overlay 、Overlay2等多址方式,現(xiàn)由于AUFS并未并入內(nèi)核,目前只有Ubuntu系統(tǒng)上能夠使用aufs作為docker的存儲(chǔ)引擎,而在CentOS系統(tǒng)上默認(rèn)使用Device Mapper,但是幸運(yùn)的是,在Linux內(nèi)核3.18.0以上的版本,是可以原生支持Overlay驅(qū)動(dòng)方式的,Overlayfs跟AUFS很像,但是性能比AUFS好,有更好的內(nèi)存利用。
Docker通過-s參數(shù)選擇存儲(chǔ)驅(qū)動(dòng), 通過-s=overlay,我們將存儲(chǔ)驅(qū)動(dòng)器設(shè)置為Overlay方式,再重啟Docker應(yīng)用。

大家可以看到,現(xiàn)在Docker已經(jīng)是使用了OverlayFS(這里大家要注意,如果系統(tǒng)有存儲(chǔ)的鏡像和運(yùn)行的容器,更改存儲(chǔ)驅(qū)動(dòng)后將都不可用,請(qǐng)先行備份)。
通過修改為OverlayFS,Device Mapper的存儲(chǔ)池容量限制及單個(gè)容器運(yùn)行最大空間限制統(tǒng)統(tǒng)沒有了,同時(shí)Overlay的讀寫性能也好于Device Mapper,只需通過-s=overlay一個(gè)參數(shù)即可優(yōu)雅的使用更好的文件系統(tǒng)來運(yùn)行容器。
至此,容器運(yùn)行時(shí)I/O錯(cuò)誤的原因已經(jīng)完美解決,希望這篇文章能幫到在使用過程中遇到相同問題的朋友。