デフォルトでは、Dockerはルートパーティションの「/var/lib/docker」ディレクトリにデータを整理します。アプリケーションやコンテナが拡張されると、このディレクトリは急速に大きな容量を占有する可能性があります。サーバーパフォーマンスの低下、データの保存不能、ランダムクラッシュなどの症状は、ルートパーティションの容量が限界に近づいていることを示しています。このガイドでは、Dockerボリュームやデータを別のパーティションに再配置し、ルートパーティションの負荷を軽減するための効果的な戦略を紹介します。
Dockerボリュームの移動の重要性
Dockerコンテナは大量の永続データを頻繁に生成するため、ルートパーティションのストレージ容量がすぐに枯渇する可能性があります。Dockerボリュームを別のパーティションに移動すると、いくつかのメリットがあります。
- ルートファイルシステムのスペースを解放する
- ディスク容量不足によるシステムクラッシュを回避する
- 大規模なアプリケーションデータを専用ストレージソリューションに割り当てる
- ストレージリソースの全体的な管理を強化
例えば、MySQLやPostgreSQLなどのデータベースコンテナは、数ギガバイト規模のデータを保存できます。これらのボリュームをより大容量のパーティションに転送することで、システムの安定性を大幅に向上させることができます。
Dockerボリュームディレクトリを見つける方法
移行を開始する前に、Dockerボリュームディレクトリを見つけることが重要な最初のステップです。以下のコマンドを使用して、利用可能なすべてのDockerボリュームを一覧表示します。
docker volume ls

特定のボリュームに関する詳細情報を取得するには、次のコマンドを実行します。
docker volume inspect volume_name
出力内で、MountpointDocker がボリューム データを保持する正確なディレクトリを示すフィールドを見つけます。

Dockerデータルート全体を移動する方法
ボリューム、イメージ、ログを含むすべてのDockerデータを別のパーティションに転送するには、Dockerストレージディレクトリ全体を移動します。この包括的なアプローチにより、「/var/lib/docker」がいっぱいになることを防ぎます。
移行中にファイルが変更されないように、まず Docker サービスを停止します。
sudo systemctl stop docker
次に、rsync コマンドを使用して Docker データをコピーします。
sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/
このコマンドは、権限を保持し、転送の進行状況を表示しながら Docker ディレクトリを複製します。

追加の Docker 属性を保持する必要がある場合は、次の拡張コマンドを使用できます。
sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/
このコマンドは、より多くのファイルシステムのメタデータを保持し、詳細な進行状況表示を行うため、推奨されます。
転送後、以前のデータ ディレクトリの名前をバックアップとして変更します。
sudo mv /var/lib/docker /var/lib/docker.old
次のコマンドを使用してデーモン ファイルを編集し、Docker 構成を更新します。
sudo nano /etc/docker/daemon.json
次の構成を追加します。
{"data-root": "/path/to/new/partition/docker-data"}

その後、次のコマンドを実行して Docker を再起動します。
sudo systemctl start docker
次のコマンドで、Docker データ ディレクトリが正常に更新されたことを確認します。
docker info | grep "Docker Root Dir"

すべてが正しいと思われる場合は、古いバックアップの削除に進むことができます。
sudo rm -rf /var/lib/docker.old
Docker Desktop 経由ですべての Docker データを移動する (GUI 方式)
グラフィカルインターフェースをご希望の場合は、Docker Desktop を使用すると、ディスクイメージの場所を変更することで、すべての Docker データを転送できます。この方法は、イメージ、コンテナ、ボリュームなど、Docker によって保存されているすべてのデータを新しい場所に効果的に移動させます。
Docker Desktop を開き、「設定」に移動し、 「リソース」 → 「詳細」に進み、「ディスクイメージの場所」オプションを見つけます。

「参照」を選択し、Dockerのストレージとして優先パーティション上のディレクトリ(例:「/mnt/newdisk/docker-data」)を指定します。「適用して再起動」をクリックして、データの再配置を開始します。

特定のボリュームデータの移動
柔軟性を高めるために、特定のDockerボリュームを別のパーティションに移動し、ホストのバインドマウントを介してコンテナで利用することができます。この方法は安全で簡単で、バックアッププロセスも簡素化されます。まず、ボリュームを使用しているコンテナを停止します。
docker stop container_name
次に、rsyncボリューム データを安全に転送するために使用します。
sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/
このコマンドは、以前のボリュームのすべての内容を「/data/docker/my_volume」に転送します。
Docker 管理ボリュームではなくバインドマウントを反映するように、「docker-compose.yml」ファイルを調整する必要があります。
services: my_service: volumes: - /data/docker/my_volume:/container/path
/container/pathコンテナ内の元のマウントパスに置き換えてください。以下のコマンドでコンテナを再デプロイします。
docker-compose up -d
結論
DockerボリュームまたはDockerデータディレクトリ全体をより容量の大きいパーティションに転送すると、ルートファイルシステムの容量を大幅に解放し、サーバーの安定性を向上させることができます。このプロアクティブなアプローチにより、データ損失のリスクを最小限に抑え、将来のストレージ管理を簡素化できます。
Docker ディレクトリ全体を移動することが不可能な場合は、docker system prune未使用のコンテナ、イメージ、ネットワーク、キャッシュを削除するコマンドを使用するか、Linux バインド マウントを使用して Docker の操作を中断せずに大量のディレクトリを移動するなど、スペースを再利用する他のオプションがあります。
コメントを残す