產品的各種環境使用了很多?CentOS??虛擬機,默認情況下?root?目錄空間是 50 G,隨著使用時間越來越長,空間會變得不夠用。
一直采用的方法就是清除無用的鏡像和?docker?日志,服務器就一直處于可用的狀態。直到連清理都沒用的時候,才想起來要要需找其他的方法。
當沒有逼到絕境的時候,我們會習慣性依賴自己熟悉的方法和工具,可能不高效,但能解決問題,這種又不是不能用的思維害人不淺,會讓人呆在舒適區不愿意出來。
上面所說的其他的方法其實也很簡單,稍微查查資料就能獲得,就是限制?Docker?日志大小和將?Docker?數據目錄切換到外部存儲中。
日志限制
1、編輯 Docker 的配置文件?/etc/docker/daemon.json,如果該文件不存在,就新建一個:
sudo vi /etc/docker/daemon.json
2、在該文件中添加以下內容,以限制單個日志文件的大小為 100MB ,并保留最近5個日志文件。這里我們使用?max-size?和?max-file?參數來控制日志的大小和數量:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } }
- max-size:單個日志文件的最大大?。?/li>
- max-file:最多保留幾個日志文件,當單個文件的日志大小超過設置后,會產生新的日志文件。
3、重新啟動?Docker?服務使配置生效:
sudo systemctl restart docker
數據目錄切換
在?CentOS?中,Docker?默認的目錄為?/var/lib/docker?,可以使用?Docker?配置文件中的?data-root?選項,進行?Dcoker?數據目錄的設置,具體步驟如下:
1、在?/etc/docker/daemon.json??配置文件中添加?data-root?選項:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } "data-root": "/home/docker" }
- /home/docker?目錄為外接存儲,或者空間比較大的卷。
2、停用?Docker。
sudo systemctl stop docker
3、將?Docker?默認目錄中的內容拷貝到新的目錄中:
sudo rsync -aqxP /var/lib/docker/ /home/docker/
- 一個用于遠程同步文件和目錄的工具;
- 告訴 ?rsync??以歸檔模式同步文件和目錄,其中 ?a??表示歸檔模式, ?q??表示安靜模式(不顯示輸出), ?x??表示不跨越文件系統邊界, ?P?。
4、修改默認目錄的名稱為 bak:
mv /var/lib/docker /var/lib/docker.bak
這樣做的好處是可以對原始數據進行備份,等運行穩定了再進行刪除,另外就是防止配置沒有生效導致還是讀取的原始目錄。
5、啟用?Dcoker:
sudo systemctl start docker
在上面第三步中使用了 ?rsync??這個命令來進行內容的同步,這個命令的含義是使用 ?rsync??工具將本地計算機中 ?/var/lib/docker/??目錄下的所有文件和子目錄同步到另一個本地計算機中的 ?/home/docker/?
在此之前,進行文件或目錄的操作使用?cp??和?scp?比較多,這次查資料時知道了 rsync 這個命令工具,便繼續學習了下和 ?cp??、?scp 。
rsync 和 cp 、 rsync 的區別
- 復制方式:cp?和?scp?會將整個文件復制到目標位置,而?rsync只會復制需要更新的部分,這可以提高復制的速度和效率。
- 支持性:rsync?支持更多的操作,例如文件同步、文件備份、文件恢復等。cp?和?scp?僅支持文件復制。
- 傳輸方式:cp?在本地文件系統之間復制文件,scp?進行遠程操作,而?rsync?可以在本地或遠程機器之間進行文件同步。
- 效率:rsync?更有效率,因為它只復制需要更新的文件。
- 可選項:rsync?提供了更多的可選項和配置選項,例如壓縮、部分傳輸、跨文件系統同步等。
總之,?rsync?是一個更強大、更高效的文件復制和同步工具,如果需要在本地或遠程機器之間進行文件同步、備份和恢復等操作,建議使用rsync。而?cp?和?scp?則適用于簡單的本地文件復制和遠程文件傳輸。
總結
通過這次日志限制和目錄切換的學習,有兩點思考:
1、很多時候,更好的方式就在離你不遠的地方,就看你愿不愿意往前邁一步去探尋一下,也就是說不能將就,不要有「又不是不能用」的思維,做產品、學技能都是一樣。
2、工作之后的很多技能的學習都是在不斷解決問題中學會的,這樣會讓你慢慢變得很有經驗,但不系統,即便某個領域感覺已經非常熟悉了,我覺得也有必要再看看書進行系統化學習,肯定能掃出很多盲點。