詳解docker容器硬盤動態(tài)擴容
擴容容器
默認來說,如果你使用 Device Mapper 的存儲插件,所有的鏡像和容器是從一個初始 10G 的文件系統(tǒng)中創(chuàng)建的。讓我們來看看如何從一個更大的文件系統(tǒng)中創(chuàng)建一個容器。
首先,我們用 Ubuntu 的鏡像來創(chuàng)建我們的容器。我們不需要在這個容器里運行任何東西,只需要這個文件(或者關聯(lián)的文件系統(tǒng))存在。為了演示,我們會在這個容器里運行 df ,來看一下根文件系統(tǒng)的大小。
$ docker run -d ubuntu df -h / 4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
由于需要修改 Device Mapper 管理中的一些卷的信息,我們現(xiàn)在用 root 的身份來運行一些命令。所有以#開頭的命令都必須以 root 身份來執(zhí)行。只要能訪問 Docker 的 Socket 服務,你也可以用普通用戶的身份來執(zhí)行其他的命令(以$開頭)。
讓我們看一下 /dev/mapper ,那里應該有一個對應容器文件系統(tǒng)的符號鏈接,以 docker-X:Y-Z- 開頭:
# ls -l /dev/mapper/docker-*-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603 lrwxrwxrwx 1 root root 7 Jan 31 21:04 /dev/mapper/docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603 -> ../dm-8
注意記住那個全名,我們未來會用到。
開始擴容:
1、首先讓我們來看一下當前卷的信息表:
# dmsetup table docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603 0 20971520 thin 254:0 7

第二個數(shù)字是設備的大小,表示有多少個 512-bytes 的扇區(qū). 這個值略高于 10GB 的大小。
2、我們來計算一下一個 42GB 的卷需要多少扇區(qū),
$ echo $((42*1024*1024*1024/512)) 88080384
精簡快照目標的一個神奇的特點是它不會限制卷的大小。當你創(chuàng)建它的時候,一個精簡的卷使用0個塊,當你開始往塊里面寫入的時候,它們會從共用的塊池中進行分配。你可以寫0個塊,或者是10億個塊,這個和精簡快照目標沒關系。文件系統(tǒng)的大小只和 Device Mapper 表有關系。
覺得困惑?不要擔心。我們只是需要裝載一個新的表,這個完全和之前的是一樣的,但是有更多的扇區(qū)。僅此而已。
3、舊表是 0 20971520 thin 254:0 7 。我們會改變第二個數(shù)字,要非常小心保持其他的值不變。你的卷可能不是 7 ,所以要使用正確的值!
這樣操作:
# echo 0 88080384 thin 254:0 7 | dmsetup load docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
4、現(xiàn)在如果我們再次檢查表的信息,步驟和前面一樣。首先使用下面的命令激活新表:
# dmsetup resume docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
執(zhí)行完命令后,再次檢查一下表的信息,發(fā)現(xiàn)它會使用新的扇區(qū)數(shù)量。
5、我們已經調整了塊設備的大小,但是我們仍然需要調整文件系統(tǒng)的大小,我們使用 xfs_growfs 來操作:
(網上很多說到的resize2fs后來看到xfs方式的使用dumpe2fs,該命令在16.04下可能出現(xiàn)文件正在使用或者找不到超級塊的錯誤,)
# xfs_growfs docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

docker動態(tài)容器擴容成功。
6、停止該容器后,無法重新啟動
當容器擴容之后,由于dm認為設備塊大小仍然為之前設置的初始大小,所以會發(fā)生無法起啟動的情況,這時只要重新操作即可。
$ docker start test#必須要先啟動一下,讓其生成dm文件才能修改 #此時會報錯,不要理會,執(zhí)行以下操作即可 $ echo 0 41943040 thin 252:0 9 | dmsetup load docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69 $ dmsetup resume docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69
這是一bug
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Docker數(shù)據(jù)存儲之Bind mounts詳解
今天小編就為大家分享一篇關于Docker數(shù)據(jù)存儲之Bind mounts詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Docker 倉庫管理和Docker Dockerfile詳解
倉庫(Repository)是集中存放鏡像的地方,以下介紹一下 Docker Hub,當然不止 docker hub,只是遠程的服務商不一樣,操作都是一樣的,對Docker 倉庫管理相關知識感興趣的朋友一起看看吧2023-11-11
docker拉取鏡像報錯:Error?response?from?daemon:?Get?“https://r
今天做完一個新項目,搭建了一個新的虛擬機,打算使用docker來搭建各種環(huán)境,發(fā)現(xiàn)拉取鏡像報錯Error?response?from?daemon:?Get?"https://registry-1.docker.io/v2/":?dial?tcp,所以接下來給大家介紹了docker拉取鏡像報錯的解決過程,需要的朋友可以參考下2024-08-08
基于CentOS8系統(tǒng)使用Docker搭建Gitlab的詳細教程
這篇文章主要介紹了基于CentOS8系統(tǒng)使用Docker搭建Gitlab教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
使用 Azure Container Registry 儲存鏡像的問題
Azure Container Registry(容器注冊表)是基于 Docker Registry 2.0規(guī)范的托管專用 Docker 注冊表服務。這篇文章主要介紹了使用 Azure Container Registry 儲存鏡像,需要的朋友可以參考下2021-05-05
docker時區(qū)問題和遷移數(shù)據(jù)問題
這篇文章主要介紹了docker時區(qū)問題和遷移數(shù)據(jù)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
如何修改Docke上傳/下載并發(fā)線程數(shù)來解決docker: unexpected EOF.錯誤問題
下載或上傳鏡像時,有可能因為網絡問題導致報出docker: unexpected EOF.的錯誤,這時候可以考慮通過修改上傳/下載并發(fā)線程數(shù)來解決,本文給大家分享兩種方法幫助大家解決,需要的朋友一起看看吧2023-03-03

