日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker容器硬盘热扩容-centos6

發(fā)布時(shí)間:2023/12/18 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker容器硬盘热扩容-centos6 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。

前面已介紹了docker很多知識(shí)點(diǎn)的操作記錄,今天這里梳理下docker容器空間擴(kuò)展的操作。默認(rèn)情況下,docker容器的空間是10G。在實(shí)際生產(chǎn)環(huán)境下,對(duì)docker容器進(jìn)行熱擴(kuò)容(動(dòng)態(tài)擴(kuò)容)是非常重要的一個(gè)需求。

Docker容器動(dòng)態(tài)擴(kuò)展的優(yōu)點(diǎn): 1)不需要修改docker配置,不需要重啟docker服務(wù); 2)可以直接對(duì)運(yùn)行中的容器進(jìn)行動(dòng)態(tài)擴(kuò)展(只能增,無法縮);Docker容器動(dòng)態(tài)擴(kuò)展的條件: 1)docker所在宿主機(jī)分區(qū)的格式必須是ext2、ext3、ext4; 2)docker存儲(chǔ)引擎必須是devicemapper --------------------------------------------------------------------------------------------------------------------------- 這里需要說明一下我在實(shí)際操作中遇到的問題: 以下Docker容器動(dòng)態(tài)擴(kuò)容的操作步驟,我在centos7上操作是不可行的! xfs是CentOS7的默認(rèn)文件系統(tǒng)類型,可以在centos7系統(tǒng)安裝時(shí)手動(dòng)指定所在分區(qū)為ext4格式。但即使這樣,創(chuàng)建容器后,發(fā)現(xiàn)容器的/分區(qū)仍然是xfs格式! 就是說centos7下宿主機(jī)分區(qū)已改為ext4,但容器還是xfs。這就導(dǎo)致后面的容器擴(kuò)展失敗!(使用resize2fs或xfs_growfs都不行) 具體原因不明

?

下面的操作均是在centos6下操作的:

?

宿主機(jī)分區(qū)的格式是ext4 [root@localhost ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 193G 103G 80G 57% / tmpfs tmpfs 32G 0 32G 0% /dev/shm /dev/sda1 ext4 194M 79M 106M 43% /boot /dev/sda2 ext4 721G 136G 549G 20% /home1)下載私有倉庫里的鏡像(centos6和centos7下的docker命令和配置還是有所不同的) [root@localhost ~]# vim /etc/sysconfig/docker ...... other_args='--insecure-registry=192.168.1.23:5000' .....[root@localhost ~]# service docker restart Stopping docker: [ OK ] Starting docker: [ OK ][root@localhost ~]# docker pull 192.168.1.23:5000/tomcat7 latest: Pulling from 192.168.1.23:5000/tomcat7 3690474eb5b4: Pull complete 0a444b299d5a: Pull complete a04895de1996: Pull complete 08e1d80f2b80: Pull complete fa7cc393f68b: Pull complete Digest: sha256:b28f263bb8d5de3c93d64e85a5e9ee5cd6a1042f45ecbb951888d897d99e14e2 Status: Downloaded newer image for 192.168.1.23:5000/tomcat7:latest[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 192.168.1.23:5000/tomcat7 latest fa7cc393f68b 2 weeks ago 562.3 MB2)創(chuàng)建容器 [root@localhost ~]# docker run -ti -d --name my-test -p 8998:8080 192.168.1.23:5000/tomcat7 /bin/bash 813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 813389572d7f 192.168.1.23:5000/tomcat7 "/bin/bash" 29 seconds ago Up 28 seconds 0.0.0.0:8998->8080/tcp my-test[root@localhost ~]# docker exec -ti my-test /bin/bash [root@813389572d7f /]# df -HT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 9.9G 703M 8.7G 8% / tmpfs tmpfs 34G 0 34G 0% /dev shm tmpfs 68M 0 68M 0% /dev/shm /dev/sda3 ext4 207G 111G 86G 57% /etc/hosts注意 容器my-test的大小為默認(rèn)的10G。 上面命令結(jié)果中的/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3文件就是my-test容器存儲(chǔ)的文件名。3)--------------下面開始進(jìn)行容器空間的動(dòng)態(tài)擴(kuò)容------------------使用dmsetup查看該文件扇區(qū)信息.下面命令結(jié)果中的第二個(gè)數(shù)字(即20971520)是設(shè)備的大小,表示有多少個(gè) 512-bytes 的扇區(qū). 這個(gè)值略高于 10GB 的大小。 [root@localhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 0 20971520 thin 253:0 13計(jì)算20G所需扇區(qū)數(shù)目 [root@localhost ~]# echo $((20*1024*1024*1024/512)) 41943040精簡(jiǎn)快照目標(biāo)的一個(gè)神奇的特點(diǎn)是它不會(huì)限制卷的大小。當(dāng)創(chuàng)建它的時(shí)候,一個(gè)精簡(jiǎn)的卷使用0個(gè)塊,當(dāng)開始往塊里面寫入的時(shí)候,它們會(huì)從共用的塊池中進(jìn)行分配。 可以寫0個(gè)塊,或者是10億個(gè)塊,這個(gè)和精簡(jiǎn)快照目標(biāo)沒關(guān)系。文件系統(tǒng)的大小只和Device Mapper表有關(guān)系。 只需要裝載一個(gè)新的表,這個(gè)完全和之前的是一樣的,但是有更多的扇區(qū)。僅此而已。將新的扇區(qū)大小寫入,注意只是改變舊表中的第二個(gè)數(shù)字20971520的數(shù)字,其他數(shù)字不變! [root@localhost ~]# echo 0 41943040 thin 253:0 13 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3將修改后的容器存儲(chǔ)文件激活 [root@localhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3重新查看文件信息 [root@localhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 0 41943040 thin 253:0 13更改文件系統(tǒng)大小,使變更生。 [root@localhost ~]# resize2fs /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 5242880 (4k) blocks. The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 5242880 blocks long.------------------------------------------------------------------------------------------------------------------ 如果這一步出現(xiàn)下面報(bào)錯(cuò): resize2fs 1.42.9 (28-Dec-2013) resize2fs: 設(shè)備或資源忙 當(dāng)嘗試打開 /dev/mapper/docker-253:0-268868570-2163383f446357876b301fb3942b706436b5eea111c06a3acba0006ec5272372 時(shí)找不到有效的文件系統(tǒng)超級(jí)塊.原因是resize2fs僅能支持ext2、ext3、ext4,不支持xfs。將docker服務(wù)器的文件系統(tǒng)格式調(diào)整為ext4即可。 本文操作機(jī)是centos6系統(tǒng),分區(qū)都是ext4格式,故不會(huì)出現(xiàn)這個(gè)報(bào)錯(cuò) ------------------------------------------------------------------------------------------------------------再次登錄my-test容器,發(fā)現(xiàn)容器大小已經(jīng)更新為20G! [root@localhost ~]# docker exec -ti my-test /bin/bash [root@813389572d7f /]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 20G 708M 18G 4% / tmpfs tmpfs 32G 0 32G 0% /dev shm tmpfs 64M 0 64M 0% /dev/shm /dev/sda3 ext4 193G 103G 80G 57% /etc/hosts------------------------------------------------------------ 擴(kuò)容后可能出現(xiàn)的問題:停止該容器后,無法重新啟動(dòng)- 當(dāng)容器擴(kuò)容之后,由于dm認(rèn)為設(shè)備塊大小仍然為之前設(shè)置的初始大小,所以會(huì)發(fā)生無法起啟動(dòng)的情況,這時(shí)只要重新操作即可。 1)必須要先啟動(dòng)一下,讓其生成dm文件才能修改 [root@localhost ~]# docker start my-test #此時(shí)會(huì)報(bào)錯(cuò),不要理會(huì),執(zhí)行以下操作即可 [root@localhost ~]# echo 0 41943040 thin 253:3 725 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 [root@localhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ---------------
?

為了方便后續(xù)容器動(dòng)態(tài)擴(kuò)容,可以采用下面的Dynamic_Modify_Docker_Disk.sh腳本(經(jīng)測(cè)試可以使用)

#!/bin/bash #This script is dynamic modify docker container disk #Author Deng Lei if [ -z $1 ] || [ -z $2 ]; thenecho "Usage: container_name increase_capacity"echo "Example: I want increase 11G to test"echo "The command is: sh `basename $0` test 11"exit 1fi if [ `docker inspect $1 &>>/dev/null && echo 0 || echo 1` -eq 1 ];thenecho "The container $1 is no exist!"exit 1 fi container_id=`docker inspect -f '{{ .Id }}' $1` now_disk=`dmsetup table /dev/mapper/docker-*-$container_id|awk '{print $2}'` disk=$(($2*1024*1024*1024/512)) if [ $disk -lt $now_disk ];thenecho "I can't shink container $1 from $(($now_disk*512/1024/1024/1024))G to ${2}G!I only modify contanier increase disk!"exit 1 fi dmsetup table /dev/mapper/docker-*-$container_id|sed "s/0 [0-9]* thin/0 $disk thin/"|dmsetup load /dev/mapper/docker-*-$container_id dmsetup resume /dev/mapper/docker-*-$container_id resize2fs /dev/mapper/docker-*-$container_id if [ $? -eq 0 ];thenecho "dynamic container $1 disk to ${2}G is success!" elseecho "dynamic container $1 disk to ${2}G is fail!" fi 比如給my-test容器動(dòng)態(tài)擴(kuò)容到30G[root@localhost ~]# chmod 755 Dynamic_Modify_Docker_Disk.sh [root@localhost ~]# sh Dynamic_Modify_Docker_Disk.sh my-test 30 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required old desc_blocks = 2, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 7864320 (4k) blocks. The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 7864320 blocks long.dynamic container my-test disk to 30G is success!登陸容器查看,已擴(kuò)容至30G! [root@localhost ~]# docker exec -ti my-test /bin/bash [root@813389572d7f /]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 30G 708M 28G 3% / tmpfs tmpfs 32G 0 32G 0% /dev shm tmpfs 64M 0 64M 0% /dev/shm /dev/sda3 動(dòng)態(tài)擴(kuò)容后,對(duì)容器進(jìn)行重啟,會(huì)發(fā)生報(bào)錯(cuò),此時(shí)再運(yùn)行一次該腳本進(jìn)行重新擴(kuò)容(空間大小要等于或大于之前的設(shè)置,出現(xiàn)報(bào)錯(cuò)不用管),再啟動(dòng)容器即可(注意:docker容器目前是無法進(jìn)行動(dòng)態(tài)縮減的,僅能進(jìn)行增加操作)。 --------------------------------------- 下面說下Docker鏡像和容器存放目錄修改方法------------------------------------------這里為了測(cè)試效果,將xfs格式的home分區(qū)盤卸載,格式化為ext4后重新掛載(當(dāng)然也可以再用之前的xfs格式)。然后將Docker的鏡像、容器存放目錄由之前默認(rèn)的/var/lib/docker修改為home分區(qū)下的路徑。 (當(dāng)然,也可以另外新建一個(gè)分區(qū),格式化,然后直接掛載到/var/lib/docker目錄下) [root@localhost ~]# df -hT 文件系統(tǒng) 類型 容量 已用 可用 已用% 掛載點(diǎn) /dev/mapper/centos-root xfs 150G 5.7G 145G 4% / devtmpfs devtmpfs 32G 0 32G 0% /dev tmpfs tmpfs 32G 0 32G 0% /dev/shm tmpfs tmpfs 32G 474M 31G 2% /run tmpfs tmpfs 32G 0 32G 0% /sys/fs/cgroup /dev/mapper/centos-home xfs 774G 33M 774G 1% /home /dev/sda2 xfs 397M 120M 278M 31% /boot tmpfs tmpfs 6.3G 0 6.3G 0% /run/user/0[root@localhost ~]# umount /home/ //卸載home分區(qū)盤 [root@localhost ~]# mkfs.ext4 /dev/mapper/centos-home //格式化home盤為ext4文件格式 [root@localhost ~]# mount /dev/mapper/centos-home /home //重新掛載 [root@localhost ~]# df -hT 文件系統(tǒng) 類型 容量 已用 可用 已用% 掛載點(diǎn) /dev/mapper/centos-root xfs 150G 5.7G 145G 4% / devtmpfs devtmpfs 32G 0 32G 0% /dev tmpfs tmpfs 32G 0 32G 0% /dev/shm tmpfs tmpfs 32G 474M 31G 2% /run tmpfs tmpfs 32G 0 32G 0% /sys/fs/cgroup /dev/sda2 xfs 397M 120M 278M 31% /boot tmpfs tmpfs 6.3G 0 6.3G 0% /run/user/0 /dev/mapper/centos-home ext4 762G 73M 723G 1% /home接著就可以移動(dòng)Docker的數(shù)據(jù)到ext4格式的home磁盤上了: 先停止docker服務(wù),保證移動(dòng)的時(shí)候數(shù)據(jù)完整 [root@localhost ~]# service docker stop移動(dòng)Docker的目錄到一個(gè)備份的目錄(可以mv改目錄名,docker重啟后會(huì)自動(dòng)生成這個(gè)目錄;也可以將目錄下內(nèi)容全部拷貝到別處,屆時(shí)要想恢復(fù)docker數(shù)據(jù),只需要將備份內(nèi)容拷貝回來,然后重啟docker服務(wù)即可) [root@localhost ~]# mv /var/lib/docker /var/lib/docker_bak //這樣,再次啟動(dòng)docker服務(wù)后,鏡像及容器數(shù)據(jù)都不在了。只有將拷貝內(nèi)容移回來,數(shù)據(jù)才會(huì)恢復(fù)。修改開啟自掛載配置,將home分區(qū)由之前的xfs改為ext4. [root@localhost ~]# cat /etc/fstab# # /etc/fstab # Created by anaconda on Wed Oct 19 15:16:20 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=349c9816-43e9-4c46-991a-e34e2370ab3f /boot xfs defaults 0 0 /dev/mapper/centos-home /home ext4 defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0[root@localhost ~]# mount -a //這條命令是重新加載/etc/fstab文件,沒有文件里定義的分區(qū)掛載沒有掛,這條命令就會(huì)自動(dòng)掛載上。 [root@localhost ~]# mount |grep home /dev/mapper/centos-home on /home type ext4 (rw,relatime,seclabel,data=ordered)最后修改docker的鏡像和容器存放路徑,比如修改為/home/var/docker。 [root@localhost ~]# mkdir -p /home/var/docker [root@localhost ~]# vim /etc/sysconfig/docker ...... OPTIONS='--selinux-enabled --log-driver=journald --graph=/home/var/docker' //添加--graph=/home/var/docker參數(shù)然后啟動(dòng)docker服務(wù),發(fā)現(xiàn)在新指定的目錄/home/var/docker下產(chǎn)生了新數(shù)據(jù) [root@localhost ~]# service docker start [root@localhost ~]# ls /home/var/docker/ containers devicemapper image network tmp trust volumes接著恢復(fù)之前的鏡像數(shù)據(jù) [root@localhost ~]# service docker stop [root@localhost ~]# rm -rf /home/var/docker/* [root@localhost ~]# mv /var/lib/docker_bak/* /home/var/docker/ [root@localhost ~]# service docker start [root@localhost ~]# docker images //發(fā)現(xiàn)鏡像數(shù)據(jù)已恢復(fù)到新目錄/home/var/docker下了 REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.1.23:5000/tomcat7 latest 47c5123914a1 8 days ago 562.3 MB docker.io/redis latest 83d6014ac5c8 13 days ago 183.6 MB docker.io/ubuntu latest 0ef2e08ed3fa 5 weeks ago 130 MB docker.io/centos latest 67591570dd29 3 months ago 191.8 MB docker.io/tomcat latest ebb17717bed4 5 months ago 355.4 MB

----------------------------------------------------溫馨提示------------------------------------------------

1)無法卸載分區(qū) [root@localhost ~]# umount /home/ umount: /home: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))如上,卸載分區(qū)時(shí)提示無法卸載,則是有進(jìn)程占用/home。 可以使用下面命令來終止占用進(jìn)程: [root@localhost ~]# fuser -m -k /home /home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m再次卸載home分區(qū)就成功了。 [root@localhost ~]# umount /home/-k 表示自動(dòng)把霸占home分區(qū)的進(jìn)程kill掉! 如果你不是很明確是否要?dú)⑺浪邪哉荚O(shè)備的程序,還可以加一個(gè)-i 參數(shù),這樣每殺死一個(gè)程序前,都會(huì)詢問!(即fuser -m -v -i -k /home)2)如按照上面步驟,將docker的存放目錄更換到/home/var/docker下。 如果后續(xù)再對(duì)home分區(qū)進(jìn)行強(qiáng)制卸載,然后再重新掛載或格式化的時(shí)候,會(huì)發(fā)現(xiàn)有報(bào)錯(cuò): [root@localhost ~]# fuser -m -k /home [root@localhost ~]# mkfs.xfs -f /dev/mapper/centos-home mkfs.xfs: /dev/mapper/centos-home contains a mounted filesystem [root@localhost ~]# mount/dev/mapper/centos-home mount: /dev/mapper/centos-home is already mounted or /home busy這是因?yàn)閐ocker數(shù)據(jù)還占用著home分區(qū),需要將docker服務(wù)停了才可以。
轉(zhuǎn)自:https://www.cnblogs.com/kevingrace/p/6667063.html

總結(jié)

以上是生活随笔為你收集整理的Docker容器硬盘热扩容-centos6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。