在使用 Docker 的過程中,如果我們一切都以默認的設置進行操作的話,在使用一段時間之后你應該會發現系統的根目錄空間越來越少,直到有一天發現空間都被占滿了,最后發現原來是被 Docker 占用了。所以這個時候就需要處理這個蛋疼的問題了,在傳統的 PC 時代我們可能會聽糾結的,因為就筆記本來說,你要加個硬盤往哪加啊。如果是台式機,倒是可以直接加,但是還得買一塊,所以此時,是時候推薦一波雲服務器了。
當然你會說,我的 xx 應用或者 xx 網站就是跑在雲服務器上,但是,這和我想說的還不太一樣,我想說的是將雲服務器作為平時的開發測試機器,這樣我們就不會遇到磁盤不足,內存不足這些問題了,因為一旦遇到不足,那就加嘛,硬盤 100G 不夠,那就加到 500G,內存 4G 不夠,那就加到 8G,還不夠,那你想要多少嘛,盡量滿足你,只是簡單幾個操作的問題。好吧,扯遠了,這里也不准備打廣告了,直接看一下當雲服務器遇到 Docker 導致根目錄滿了之后如何處理的問題吧。
解決問題的方式無外乎第一步:添加一個新硬盤,第二步遷移數據。對於雲服務來說,都很容易,下面就具體描述一下。
掛載雲磁盤
雲服務器添加磁盤很容易的,直接從控制面板將磁盤加入主機即可,一般的雲服務軟件都是支持主機自動識別的,接下來就是主機內部的操作了,我這里用的是 CentOS7,所以步驟中的一些特定命令也是在相應環境下執行的:
使用 fdisk 分區
使用 fdisk 對數據盤進行分區,執行命令
fdisk /dev/vdb
。根據提示,依次操作:a. 輸入 n,回車。
b. 輸入 p,回車。
c. 輸入 1,3 次回車。
d. 輸入 wq 后,回車,開始創建分區。使用 parted 分區
使用 parted 對數據盤進行分區,執行命令
parted /dev/vdb
。根據提示,依次操作如下:a. 輸入
mklabel gpt
,如果有提示,輸入 Y,回車。
b.mkpart primary 0 -1
,如果有提示,輸入 I,回車。
c. 輸入quit
,回車,退出parted
。格式化新分區。
假設格式化為 "ext4" 格式,則輸入命令
$ mkfs.ext4 /dev/sdb1
格式化的時間長短根據雲磁盤大小變化,雲磁盤越大,格式化時間越長。
掛載磁盤
$ echo '/dev/vdb1 /mnt ext4 defaults 0 0' >> /etc/fstab $ mount -a $ df -h
這個時候就可以看到新掛載的磁盤的大小和位置了,這個時候,就可以開始轉移 Docker 的數據了。
修改 Docker 位置:
默認情況下docker的存放位置為: /var/lib/docker
,一般根下分區我們不會給太大。所以這個時候我們要考慮掛載大分區到 /var/lib/docker
,具體的操作步驟如下:
- 停掉 Docker
- 拷貝 Docker 文件到目錄
cp -r /var/lib/docker/* /mnt/
- 刪除 Docker 原始目錄
rm -rf /var/lib/docker
- 掛載分區為 Docker 目錄:
mount /dev/vdb1 /var/lib/docker
- 啟動 Docker,使用
docker ps
和docker images
確定遷移成功