サーバーのシステムディスク容量が限られており、拡張が困難な場合、Docker のデフォルトデータ保存先(/var/lib/docker)がシステムディスクを圧迫することがあります。特にクラウド環境では、小規模なOSディスク+大容量の追加ストレージ(例:/home1)が一般的です。この記事では、Docker のデータルートを任意のマウント済みストレージへ再設定する方法を、新規導入時と既存運用中の2つのシナリオに分けて解説します。
前提条件
- 追加ストレージ(例:
/home1)が正しくマウント済みであること - 必要に応じて、
/etc/fstabで起動時自動マウントを設定済みであること - root 権限または sudo 実行権限があること
ケース①:Docker 未インストールの新規サーバー
/etc/docker/daemon.jsonを作成し、カスタムデータルートを指定します:
{
"data-root": "/home1/docker-engine"
}
※ /home1 は実際のストレージマウントポイントに置き換えてください。末尾の docker-engine は任意のサブディレクトリ名です。
- Docker を通常通りインストール(例:Docker 公式リポジトリ経由):
# CentOS/RHEL Stream 8+
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io
- サービスを起動し、設定を確認:
sudo systemctl enable docker
sudo systemctl start docker
sudo docker info | grep "Docker Root Dir"
出力が /home1/docker-engine になっていれば成功です。
ケース②:Docker 既存稼働中(コンテナ・ボリュームあり)
※ 作業中は Docker サービスが停止するため、メンテナンスウィンドウを確保してください。
- Docker を完全停止:
sudo systemctl stop docker
sudo systemctl disable docker.socket # socket アクティベーションが有効な場合
- 現在のデータルートを特定:
# 設定ファイルから確認(存在する場合)
cat /etc/docker/daemon.json | grep "data-root"
# またはデフォルトパスを仮定
CURRENT_ROOT="/var/lib/docker"
- 新しいターゲットディレクトリを作成し、権限を設定:
sudo mkdir -p /home1/docker-engine
sudo chown root:root /home1/docker-engine
sudo chmod 700 /home1/docker-engine
- データを安全に移行(rsync を使用):
sudo rsync -avz --progress --delete \
--exclude 'tmp' --exclude 'buildkit' \
"$CURRENT_ROOT/" /home1/docker-engine/
※ --delete は同期後に不要なファイルを削除しますが、初回実行時は省略推奨。また、/ の有無に注意(ソース末尾に必須)。
/etc/docker/daemon.jsonを更新:
{
"data-root": "/home1/docker-engine",
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
- Docker を再起動し、動作確認:
sudo systemctl daemon-reload
sudo systemctl start docker
sudo docker ps -a # 全コンテナが表示されることを確認
- 旧データの削除(空き容量確保のため):
# 移行完了後、念のため再起動してから実行
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker
※ バックアップを取ってから実行することを強く推奨します。