Dockerでコンテナを構築して使用し続けるとコンテナもデータを書き込むボリュームがあるためそのうちコンテナないのボリュームが逼迫してしまいます。
今回は、Dockerコンテナの仮想ボリューム拡張手順についてまとめました。
また、本環境は「VMware vSphere ESXi7.0」、「CentOS8」でdockerを構築した環境となります。
# cat /etc/redhat-release CentOS Linux release 8.3.2011
「Docker」コンテナの仮想ボリュームを拡張する手順
CentOS8において、Dockerコンテナはデフォルトで「/dev/mapper/cl-root」のボリューム領域を仮想ボリュームとして使用します。
なのでこの「/dev/mapper/cl-root」のボリュームを拡張することでDockerの仮想ボリュームが自動的に拡張されます。
今回のDockerボリュームの拡張は「150GB」>「200GB」に拡張した例となります。
ボリューム拡張対象の仮想マシン(CentOS8)を停止しボリューム拡張
まずは、ボリューム拡張対象の仮想マシン(CentOS8)を仮想環境で停止し、「設定の編集」からボリュームを変更します。
今回は「150GB」>「200GB」への変更となります。
変更後、仮想マシンを起動させます。
Dockerコンテナのボリューム事前確認
仮想マシン起動後、以下のようにDockerコンテナを起動します。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fb891e567c3 centos:latest "/sbin/init" 4 days ago Up 3 seconds 0.0.0.0:2222->22/tcp, :::2222->22/tcp centos8
コンテナのボリュームはボリューム先を指定しない場合はデフォルトで「overlay」配下に作成されます。
また、この仮想ボリュームは「/dev/mapper/cl-root」のボリュームの領域を参照しています。
# df -hT ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs tmpfs 3.8G 8.7M 3.8G 1% /run tmpfs tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 100G 3.2G 97G 4% / /dev/sda2 ext4 976M 202M 708M 23% /boot /dev/sda1 vfat 599M 6.9M 592M 2% /boot/efi /dev/mapper/cl-home xfs 41G 322M 41G 1% /home tmpfs tmpfs 777M 0 777M 0% /run/user/0 overlay overlay 100G 3.2G 97G 4% /var/lib/docker/overlay2/2eee25975e134d7b737be2773fb7394765e1eedbd6ca89362db5744372125134/merged
「fdisk」コマンドで現状のラベルを確認
次に「fdisk -l」で現状のラベルを確認します。
今回拡張するラベルは「/dev/sda3」となります。
「/dev/sda4」は前回拡張分のラベルとなります。
今回は新規で作成しないといけないので、「/dev/sda5」を作成することになります。
また、2行目で、「サイズが合致しません」という警告が発生しています。
これは、上記で仮想マシンのボリュームを拡張した影響であり、後の「fdisk」コマンドで修正できます。
[root@centos8-test ~]# fdisk -l GPT PMBR のサイズが合致していません (314572799 != 419430399) が、w (書き込み) コマンドで修正されます。 The backup GPT table is not on the end of the device. This problem will be corrected by write. ディスク /dev/sda: 200 GiB, 214748364800 バイト, 419430400 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: gpt ディスク識別子: 99C8BEE2-291F-4AD1-881F-8AC428E9A2E1 デバイス 開始位置 終了位置 セクタ サイズ タイプ /dev/sda1 2048 1230847 1228800 600M EFI システム /dev/sda2 1230848 3327999 2097152 1G Linux ファイルシステム /dev/sda3 3328000 209713151 206385152 98.4G Linux LVM /dev/sda4 209713152 314572766 104859615 50G Linux LVM ------ 中略 ------
増設したディスクへラベルを割り当てる
次に増設した分のディスク容量(50GB)にラベルを割り当てます。
コマンドは「fdisk /dev/sda」となります。
次に以下手順を実行します。
- 10行目:「p」コマンドで現在のパーティションの状況を確認
- 25行目:「n」コマンドを実行します。
- 26行目:パーティションタイプの選択で「既定値」の「5」を選択します。
- 27-28行目:そのままエンターキーを押します。
- 30行目:新しいパーティション「/dev/sda5」が作成されます。
- 32行目:「t」コマンドを実行し、「l」コマンドで確認した「/dev/sda3」と同じタイプ「Linux LVM」の「31」を入力します。
- 31行目:「w」コマンドでラベルの書き込みをし、fdiskコマンドを終了します。
[root@centos8-test ~]# fdisk /dev/sda fdisk (util-linux 2.32.1) へようこそ。 ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。 書き込みコマンドを使用する際は、注意して実行してください。 GPT PMBR のサイズが合致していません (314572799 != 419430399) が、w (書き込み) コマンドで修正されます。 The backup GPT table is not on the end of the device. This problem will be corrected by write. コマンド (m でヘルプ): p ディスク /dev/sda: 200 GiB, 214748364800 バイト, 419430400 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: gpt ディスク識別子: 99C8BEE2-291F-4AD1-881F-8AC428E9A2E1 デバイス 開始位置 終了位置 セクタ サイズ タイプ /dev/sda1 2048 1230847 1228800 600M EFI システム /dev/sda2 1230848 3327999 2097152 1G Linux ファイルシステム /dev/sda3 3328000 209713151 206385152 98.4G Linux LVM /dev/sda4 209713152 314572766 104859615 50G Linux LVM コマンド (m でヘルプ): n パーティション番号 (5-128, 既定値 5): 5 最初のセクタ (314572767-419430366, 既定値 314572800): 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (314572800-419430366, 既定値 419430366): 新しいパーティション 5 をタイプ Linux filesystem、サイズ 50 GiB で作成しました。 コマンド (m でヘルプ): t パーティション番号 (1-5, 既定値 5): 5 パーティションのタイプ (L で利用可能なタイプを一覧表示します): 31 パーティションのタイプを 'Linux filesystem' から 'Linux LVM' に変更しました。 コマンド (m でヘルプ): w パーティション情報が変更されました。 ディスクを同期しています。
上記設定完了後、「fdisk -l」コマンドで新たに「/dev/sda5」が作成されたことが確認できます。
[root@centos8-test ~]# fdisk -l ディスク /dev/sda: 200 GiB, 214748364800 バイト, 419430400 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: gpt ディスク識別子: 99C8BEE2-291F-4AD1-881F-8AC428E9A2E1 デバイス 開始位置 終了位置 セクタ サイズ タイプ /dev/sda1 2048 1230847 1228800 600M EFI システム /dev/sda2 1230848 3327999 2097152 1G Linux ファイルシステム /dev/sda3 3328000 209713151 206385152 98.4G Linux LVM /dev/sda4 209713152 314572766 104859615 50G Linux LVM /dev/sda5 314572800 419430366 104857567 50G Linux LVM ------中略------
拡張用のボリュームを物理ボリューム(PV)に反映
次に物理ボリューム(PV)に追加したボリュームを反映させます。
「pvdisplay」コマンドで、現在のPVの状態を確認します。
[root@centos8-test ~]# pvdisplay --- Physical volume --- PV Name /dev/sda3 VG Name cl PV Size 98.41 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 25193 Free PE 0 Allocated PE 25193 PV UUID Fczg2W-Uzuy-xsQH-rFhM-b4ap-0NaQ-eIOTZn --- Physical volume --- PV Name /dev/sda4 VG Name cl PV Size 50.00 GiB / not usable 4.98 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 12799 Free PE 0 Allocated PE 12799 PV UUID rDnmSz-jUAe-5w7g-C3wN-KmnW-JaRx-f2NlLp
pvdisplayでは拡張先の「/dev/sda3」と、前回拡張分の「/dev/sda4」が表示されます。
新規ラベルで作成した「/dev/sda5」は表示されていません。
以下コマンドで新規物理ボリューム「/dev/sda5」を作成します。
[root@centos8-test ~]# pvcreate /dev/sda5 Physical volume "/dev/sda5" successfully created.
上記で「successfully created.」と出力されれば正常に新規ボリュームが作成されます。
再度「pvdisplay」を実行すると、上記で作成した「/dev/sda5」が表示されます。
[root@centos8-test ~]# pvdisplay --- Physical volume --- PV Name /dev/sda3 VG Name cl PV Size 98.41 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 25193 Free PE 0 Allocated PE 25193 PV UUID Fczg2W-Uzuy-xsQH-rFhM-b4ap-0NaQ-eIOTZn --- Physical volume --- PV Name /dev/sda4 VG Name cl PV Size 50.00 GiB / not usable 4.98 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 12799 Free PE 0 Allocated PE 12799 PV UUID rDnmSz-jUAe-5w7g-C3wN-KmnW-JaRx-f2NlLp "/dev/sda5" is a new physical volume of "<50.00 GiB" --- NEW Physical volume --- PV Name /dev/sda5 VG Name PV Size <50.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID cHejvC-CQOz-3toM-6ROT-4R1Z-tTec-kuWqVu
ボリュームグループ(VG)拡張
次にボリュームグループを拡張します。
「vgdisplay」コマンドでVGのサイズを確認します。
現状は「148.41 GiB」となっています。
[root@centos8-test ~]# vgdisplay --- Volume group --- VG Name cl System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 2 Act PV 2 VG Size <148.41 GiB PE Size 4.00 MiB Total PE 37992 Alloc PE / Size 37992 / <148.41 GiB Free PE / Size 0 / 0 VG UUID S0Wbgt-3buq-1w0t-f8dg-oGna-fULe-Px4FcX
このVGに追加分の50GBを拡張します。
VG Nameが「cl」となるので、以下のコマンドを実行し、VGのボリュームを拡張します。
[root@centos8-test ~]# vgextend cl /dev/sda5 Volume group "cl" successfully extended
再度、「vgdisplay」を実行すると「VG Size」が「198.41 GiB」と「50GiB」分拡張されたことが確認できます。
[root@centos8-test ~]# vgdisplay --- Volume group --- VG Name cl System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 3 Act PV 3 VG Size 198.40 GiB PE Size 4.00 MiB Total PE 50791 Alloc PE / Size 37992 / <148.41 GiB Free PE / Size 12799 / <50.00 GiB VG UUID S0Wbgt-3buq-1w0t-f8dg-oGna-fULe-Px4FcX
論理ボリューム(LV)拡張
次に論理ボリューム(LV)の拡張を実施します。
今回対象はDockerコンテナの仮想ボリューム「overlay」となるため、参照先のファイルパス「/dev/mapper/cl-root」を拡張します。
現状では、現状拡張されていないので100GBとなります。
[root@centos8-test ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 3.8G 0 3.8G 0% /dev tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 3.8G 8.7M 3.8G 1% /run tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup /dev/mapper/cl-root 100G 3.2G 97G 4% / /dev/mapper/cl-home 41G 322M 41G 1% /home /dev/sda2 976M 202M 708M 23% /boot /dev/sda1 599M 6.9M 592M 2% /boot/efi tmpfs 777M 0 777M 0% /run/user/0 overlay 100G 3.2G 97G 4% /var/lib/docker/overlay2/2eee25975e134d7b737be2773fb7394765e1eedbd6ca89362db5744372125134/merged
「lvdisplay」コマンドで「LV Size」を確認すると「100GiB」となっています。
[root@centos8-test ~]# lvdisplay ------中略------ --- Logical volume --- LV Path /dev/cl/root LV Name root VG Name cl LV UUID UAVzab-ABpi-5XzZ-iXyE-fl5B-xbA1-Ncdd2R LV Write Access read/write LV Creation host, time centos8-test, 2021-04-15 15:03:16 +0900 LV Status available # open 1 LV Size <100.00 GiB Current LE 25599 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
「/dev/mapper/cl-root 」の拡張サイズは、今回追加した50GBすべての空き領域を割り当てます。
以下コマンドを実行します。
[root@centos8-test ~]# lvextend -l +100%FREE /dev/mapper/cl-root Size of logical volume cl/root changed from <100.00 GiB (25599 extents) to 149.99 GiB (38398 extents). Logical volume cl/root successfully resized.
上記で、「successfully resized.」となると拡張は成功します。
再度「lvdisplay」コマンドで「LV Size」を確認すると「LV Size」が拡張されたことが確認できます。
[root@centos8-test ~]# lvdisplay ------中略------ --- Logical volume --- LV Path /dev/cl/root LV Name root VG Name cl LV UUID UAVzab-ABpi-5XzZ-iXyE-fl5B-xbA1-Ncdd2R LV Write Access read/write LV Creation host, time centos8-test, 2021-04-15 15:03:16 +0900 LV Status available # open 1 LV Size 149.99 GiB Current LE 38398 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
ファイルシステムでのDockerコンテナのボリュームサイズ拡張を反映
上記で「LV Size」のボリュームサイズは拡張されましたが、以下コマンドでファイルシステムでのサイズは拡張されていません。
「/dev/mapper/cl-root」が拡張されておらず、Dockerコンテナの仮想ボリューム「overlay」のボリュームサイズも拡張されていません。
[root@centos8-test ~]# df -hT ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs tmpfs 3.8G 8.7M 3.8G 1% /run tmpfs tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 100G 3.2G 97G 4% / /dev/mapper/cl-home xfs 41G 322M 41G 1% /home /dev/sda2 ext4 976M 202M 708M 23% /boot /dev/sda1 vfat 599M 6.9M 592M 2% /boot/efi tmpfs tmpfs 777M 0 777M 0% /run/user/0 overlay overlay 100G 3.2G 97G 4% /var/lib/docker/overlay2/2eee25975e134d7b737be2773fb7394765e1eedbd6ca89362db5744372125134/merged
ファイルシステム側に増設した論理ボリューム(LV)を認識させないといけないので「xfs_growfs」コマンドを実行し認識させます。
[root@centos8-test ~]# xfs_growfs / meta-data=/dev/mapper/cl-root isize=512 agcount=8, agsize=3276800 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=26213376, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=6400, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 26213376 to 39319552
「xfs_growfs」コマンドを実行後、再度ファイルシステムのボリュームサイズを確認すると「/dev/mapper/cl-root」のボリュームが拡張され、Dockerコンテナのボリューム「overlay」も同じサイズに拡張されていることが確認できます。
[root@centos8-test ~]# df -hT ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs tmpfs 3.8G 8.7M 3.8G 1% /run tmpfs tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 150G 3.6G 147G 3% / /dev/mapper/cl-home xfs 41G 322M 41G 1% /home /dev/sda2 ext4 976M 202M 708M 23% /boot /dev/sda1 vfat 599M 6.9M 592M 2% /boot/efi tmpfs tmpfs 777M 0 777M 0% /run/user/0 overlay overlay 150G 3.6G 147G 3% /var/lib/docker/overlay2/2eee25975e134d7b737be2773fb7394765e1eedbd6ca89362db5744372125134/merged
これで、Dockerコンテナのボリューム拡張は完了です。
CentOS8のボリューム拡張手順は以下の記事も参考にしてください。
ESXi7.0、CentOS8で構築したDockerコンテナの仮想ボリュームを拡張する手順は以上となります。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す