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

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

docker動(dòng)態(tài)容器擴(kuò)容成功。
6、停止該容器后,無法重新啟動(dòng)
當(dāng)容器擴(kuò)容之后,由于dm認(rèn)為設(shè)備塊大小仍然為之前設(shè)置的初始大小,所以會(huì)發(fā)生無法起啟動(dòng)的情況,這時(shí)只要重新操作即可。
$ docker start test#必須要先啟動(dòng)一下,讓其生成dm文件才能修改 #此時(shí)會(huì)報(bào)錯(cuò),不要理會(huì),執(zhí)行以下操作即可 $ echo 0 41943040 thin 252:0 9 | dmsetup load docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69 $ dmsetup resume docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69
這是一bug
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Docker Compose實(shí)現(xiàn)秒級(jí)擴(kuò)容的方法步驟
- 解決docker目錄內(nèi)存不足擴(kuò)容處理方案
- Docker遷移及存儲(chǔ)擴(kuò)容遇到的問題
- Docker配置Redis集群及主從擴(kuò)容與縮容的操作方法
- docker overlay擴(kuò)容問題
- Rancher+Docker+SpringBoot實(shí)現(xiàn)微服務(wù)部署、擴(kuò)容、環(huán)境監(jiān)控
- 關(guān)于docker?compose安裝redis集群的問題(集群擴(kuò)容、集群收縮)
- Docker進(jìn)階之快速擴(kuò)容的方法
- Docker Swarm自動(dòng)擴(kuò)容的陷阱(3個(gè)致命誤區(qū))
相關(guān)文章
docker run -v 掛載數(shù)據(jù)卷異常,容器狀態(tài)一直是restarting的解決
這篇文章主要介紹了docker run -v 掛載數(shù)據(jù)卷異常,容器狀態(tài)一直是restarting的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
通過提前bake Docker鏡像加快基礎(chǔ)設(shè)施的啟動(dòng)速度
這篇文章主要介紹了通過提前bake Docker鏡像加快基礎(chǔ)設(shè)施的啟動(dòng)速度的相關(guān)資料,需要的朋友可以參考下2017-01-01
Ubuntu24.04LTS在線安裝Docker引擎的詳細(xì)過程
本文介紹了在Ubuntu 24.04 LTS系統(tǒng)上安裝Docker引擎的步驟,包括卸載舊版本、設(shè)置Docker APT倉庫、安裝最新版或指定版本的Docker,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-11-11
Docker中安裝ElasticSearch+Kibana+Logstash(ELK)實(shí)踐記錄
文章介紹了如何使用Docker在本地安裝和配置Elasticsearch、Kibana和Logstash(ELK堆棧),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-03-03
使用elasticsearch定時(shí)刪除索引數(shù)據(jù)
這篇文章主要介紹了使用elasticsearch定時(shí)刪除索引數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
詳解Windows下運(yùn)用Docker部署Node.js開發(fā)環(huán)境
這篇文章主要介紹了詳解Windows下運(yùn)用Docker部署Node.js開發(fā)環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01

