43

2 つのコンテナー (Jenkins と Nexus、両方とも独自の名前付きボリューム) を備えた Docker 環境があります。未使用のコンテナーとイメージを削除する毎日の cron ジョブがあります。これはうまくいっています。しかし、問題は私のデバイスマッパーの中にあります:

du -sh /var/lib/docker/
30G docker/

Dockerフォルダー内の各フォルダーを作成できます:ボリューム(大きいですが、私の場合は正常です):

/var/lib/docker# du -sh volumes/
14G volumes/

コンテナ:

/var/lib/docker# du -sh containers/
3.2M    containers/

画像:

/var/lib/docker# du -sh image/
5.8M    image/

デバイスマッパー:

/var/lib/docker# du -sh devicemapper/
  16G   devicemapper/

/var/lib/docker/devicemapper/mnt7.3G /var/lib/docker/devicemapper/devicemapperは 8.1G

ドッカー情報:

Storage Driver: devicemapper
 Pool Name: docker-202:1-xxx-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: ext4
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 5.377 GB
 Data Space Total: 107.4 GB
 Data Space Available: 28.8 GB
 Metadata Space Used: 6.148 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.141 GB
 Udev Sync Supported: true

このスペースは何ですか?物を壊さずに掃除できますか?

4

4 に答える 4

55

重大なことに devicemapper ループ ファイルを使用しないでください。Docker には、これに関する重大な警告があります。

ディレクトリには、/var/lib/docker/devicemapper/devicemapperdocker がマウントするすべてのデータを含むスパース ループ ファイルが含まれます。そのため、lvm ツールを使用して、それらをトロールして何かを行う必要があります。devicemapperの削除の問題を読んでください。それらはちょっと解決されていますが、そうではないかもしれません。

私は、可能な場所から離れるdevicemapperか、RHEL ベースのもので LVM シン プールを使用します。ストレージ ドライバを変更できない場合は、同じ手順で、再利用できない割り当てられたスパース スペースを少なくともクリアできます。

docker ストレージ ドライバーの変更

/var/lib/dockerストレージ ドライバーを変更するには、すべての Docker データを含むディレクトリをダンプする必要があります。その一部を保存する方法はありますが、それには Docker の内部をいじる必要があります。保持したいコンテナーまたはボリュームをコミットしてエクスポートし、変更後にインポートすることをお勧めします。そうしないと、Docker が新しく空の状態でインストールされます。

  1. データのエクスポート

  2. ドッカーを停止

  3. 削除する/var/lib/docker

  4. Docker の起動を変更して、新しいストレージ ドライバーを使用します。またはまたはまたは--storage-driver=<name>で 設定/lib/systemd/system/docker.service/etc/systemd/system/docker.service/etc/default/docker/etc/sysconfig/docker

  5. ドッカーを起動

  6. データのインポート

AUFS

AUFS はメインライン カーネルにはありません (今後もありません)。つまり、ディストリビューションは何らかの方法で積極的に含める必要があります。Ubuntu の場合、linux-image-extraパッケージに含まれています。

apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

次に、ストレージ ドライバ オプションを次のように変更します。--storage-driver=aufs

OverlayFS

OverlayFS は Ubuntu で既に利用可能です。3.xカーネルをまだ使用している場合は、ストレージ ドライバーを--storage-driver=overlay2またはに変更するだけです。--storage-driver=overlay

これがどれほど良いアイデアかは、今のところわかりません。ループ ファイルよりもはるかに悪いことはありませんがoverlay2ドライバーは開発用としてはかなり安定していますが、まだ運用準備が整っているとは見なされていません (たとえば、Docker Enterprise はサポートを提供していません)。 AUFS/カーネルの問題。

ダイレクト LVM シン プール

devicemapper ループ ファイルの代わりに、LVM シン プールを直接使用できます。RHEL ではdocker-storage-setup、EPEL docker パッケージで配布されるユーティリティを使用してこれを簡単に行うことができます。Docker には、ボリュームを手動でセットアップするための詳細な手順があります

--storage-driver=devicemapper \
--storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool \
--storage-opt dm.use_deferred_removal=true

Docker 17.06+ は、シンプルなdirect-lvmブロック デバイス セットアップの管理をサポートしています。

LVM ボリュームのスペースが不足しないようにしてください。終了する必要がある無応答の Docker デーモンが発生し、クリーンアップが困難なまだ使用中の LVM リソースが発生します。

于 2016-06-07T13:51:26.580 に答える