ホームページ >運用・保守 >Docker >Docker がハードディスクの共有に失敗するとどうなりますか?

Docker がハードディスクの共有に失敗するとどうなりますか?

PHPz
PHPzオリジナル
2023-04-19 17:18:56799ブラウズ

Docker を使用するプロセスでは、異なるマシン間で Docker イメージとコンテナーを共有する必要がある場合があります。簡単な方法は、これらのイメージとコンテナを tar ファイルにパッケージ化し、ネットワーク経由でターゲット マシンに転送し、解凍して Docker にロードすることです。ただし、これらのイメージとコンテナをターゲット マシンに正常に転送したとしても、イメージをロードしたりコンテナを起動したりできず、「デバイスに空き領域がありません」というメッセージが表示される、つまりパーティションのディスク領域が不足するという問題が発生することがよくあります。特に次の場合に不十分です。 この問題は、ストレージ ドライバー オーバーレイ 2 を使用するときに発生する可能性が高くなります。

いったい何が起こっているのでしょうか?私もかつて同様の問題に遭遇しましたが、調査と研究を行った結果、その理由と解決策が見つかりました:

  1. Docker がハードディスクの共有に失敗するとどうなりますか? ストレージ ドライバーの動作原理

Docker ストレージ ドライバーには以下が含まれます。 AUFS、DeviceMapper、および OverlayFS のうち、Docker がハードディスクの共有に失敗するとどうなりますか? がより一般的です。これは overlayFS ファイル システムに基づいており、次の図に示すように、複数のミラーリングされたファイル システムを重ね合わせて共同マウント ポイントを形成し、完全なファイル システムのように見えます。

図に示すように、青色の部分が基本イメージのファイル システム、緑色の部分がコンテナ層のファイル システム、赤色の部分が読み取り専用層のファイル システムです。読み取り専用レイヤーには、すべてのイメージに共通のファイル システムが含まれています。コンテナ レイヤーは、各コンテナのファイル システムです。コンテナごとに読み取り専用レイヤーを作成し、その上に書き込み可能なレイヤーを追加して、各コンテナが参照できるようにします。独立したファイル システムであり、相互に干渉しません。

Docker がハードディスクの共有に失敗するとどうなりますか?

パーティション容量不足の原因

    Docker コンテナを作成すると、/var/lib/docker/Docker がハードディスクの共有に失敗するとどうなりますか? にコンテナごとに Docker がハードディスクの共有に失敗するとどうなりますか? ストレージ ドライバーが作成されます。 directory コンテナのファイル システムの別のサブディレクトリ。これらのサブディレクトリ内のファイル データはすべてベース イメージに保存されるため、そのサイズはストレージ ドライバーのパフォーマンスに影響しません。ただし、あるマシンから Docker イメージとコンテナをパッケージ化して別のマシンに送信すると、Docker がハードディスクの共有に失敗するとどうなりますか? ストレージ ドライバーがデータを解凍するときに、データが /var/lib/docker ディレクトリに解凍され、このディレクトリにファイル スペースが占有されます。が大きすぎるため、/var/lib/docker が配置されているパーティションのディスク容量もそれに応じて小さくなります。次の図は、この問題を反映するために /var/lib/docker ディレクトリを例にしています:

この図では、/dev/vda1 パーティションのディスク サイズは 50 GB、/var/lib/docker パーティションのディスク サイズは 21 GB ですが、docker が作成するコンテナーが多すぎるため、/var / lib/docker ディレクトリの容量が不足しており、残り 30.72MB しかないため、ディスク容量が不足しているマシンからコンテナを起動したい場合、起動に失敗するという問題が発生します。

Docker がハードディスクの共有に失敗するとどうなりますか?_space

関連するソリューションは何ですか?

上記の問題に対応して、いくつかの解決策を提供しました:

  1. 3.1 パーティションのディスク領域を拡張します
  2. これは最も一般的な方法です。仮想マシンの場合は、仮想マシン管理ツールでディスク パーティションのサイズを拡張し、仮想マシンを再起動できます。クラウドサーバーの場合、ほとんどのクラウドプラットフォームはオンラインディスク拡張の機能を提供しますが、操作プロセスは比較的複雑であり、データ損失を避けるために注意が必要です。

3.2 /var/lib/docker ディレクトリをより大きなデータディスクにマウントします

事前に 21GB を超えるディスク (20T など) を用意し、ext4 形式にフォーマットしてマウントします/data ディレクトリ上で、/var/lib/docker ディレクトリをストレージ用のデータ ディスクに移行します。具体的な操作手順は次のとおりです。

# 制作文件系统格式
mkfs.ext4 /dev/vdb

# 挂载
mount /dev/vdb /data

# 备份原/var/lib/docker目录下所有数据
cp -au /var/lib/docker/* /data/

# 卸载/var/lib/docker目录
umount /var/lib/docker

# 将/var/lib/docker目录迁移到新的数据盘中
echo '/dev/vdb /var/lib/docker ext4 defaults 0 0' >> /etc/fstab
mount -a

3.3 使用されなくなった Docker イメージとコンテナを削除します

次のコマンドを使用して、ディスク領域をクリーンアップできます:

# 清理所有停止的容器
docker container prune

# 清理所有未被标记的镜像
docker image prune -a

# 删除所有没有容器使用的镜像
docker image prune -a --filter "dangling=true"

まとめ

Dockerを使用する際には、ストレージドライバーが使用する容量が十分であるかどうかに常に注意する必要があり、十分でないと起動に失敗する可能性があります。これを行うには、上記の 3 つの解決策のいずれかを実行できますが、個人的には、元のファイル システムを破壊せずに問題を迅速に解決できる 2 番目の方法をお勧めします。私の共有があなたのお役に立てば幸いです。読んでいただきありがとうございます。

以上がDocker がハードディスクの共有に失敗するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。