Docker データストレージを別ディスクに移行する手順(CentOS/Ubuntu/Debian 対応)

サーバーのシステムディスク容量が限られており、拡張が困難な場合、Docker のデフォルトデータ保存先(/var/lib/docker)がシステムディスクを圧迫することがあります。特にクラウド環境では、小規模なOSディスク+大容量の追加ストレージ(例:/home1)が一般的です。この記事では、Docker のデータルートを任意のマウント済みストレージへ再設定する方法を、新規導入時と既存運用中の2つのシナリオに分けて解説します。

前提条件

  • 追加ストレージ(例:/home1)が正しくマウント済みであること
  • 必要に応じて、/etc/fstab で起動時自動マウントを設定済みであること
  • root 権限または sudo 実行権限があること

ケース①:Docker 未インストールの新規サーバー

  1. /etc/docker/daemon.json を作成し、カスタムデータルートを指定します:
{
  "data-root": "/home1/docker-engine"
}

/home1 は実際のストレージマウントポイントに置き換えてください。末尾の docker-engine は任意のサブディレクトリ名です。

  1. 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
  1. サービスを起動し、設定を確認:
sudo systemctl enable docker
sudo systemctl start docker
sudo docker info | grep "Docker Root Dir"

出力が /home1/docker-engine になっていれば成功です。

ケース②:Docker 既存稼働中(コンテナ・ボリュームあり)

※ 作業中は Docker サービスが停止するため、メンテナンスウィンドウを確保してください。

  1. Docker を完全停止:
sudo systemctl stop docker
sudo systemctl disable docker.socket  # socket アクティベーションが有効な場合
  1. 現在のデータルートを特定:
# 設定ファイルから確認(存在する場合)
cat /etc/docker/daemon.json | grep "data-root"

# またはデフォルトパスを仮定
CURRENT_ROOT="/var/lib/docker"
  1. 新しいターゲットディレクトリを作成し、権限を設定:
sudo mkdir -p /home1/docker-engine
sudo chown root:root /home1/docker-engine
sudo chmod 700 /home1/docker-engine
  1. データを安全に移行(rsync を使用):
sudo rsync -avz --progress --delete \
  --exclude 'tmp' --exclude 'buildkit' \
  "$CURRENT_ROOT/" /home1/docker-engine/

--delete は同期後に不要なファイルを削除しますが、初回実行時は省略推奨。また、/ の有無に注意(ソース末尾に必須)。

  1. /etc/docker/daemon.json を更新:
{
  "data-root": "/home1/docker-engine",
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}
  1. Docker を再起動し、動作確認:
sudo systemctl daemon-reload
sudo systemctl start docker
sudo docker ps -a  # 全コンテナが表示されることを確認
  1. 旧データの削除(空き容量確保のため):
# 移行完了後、念のため再起動してから実行
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker

※ バックアップを取ってから実行することを強く推奨します。

タグ: Docker linux storage-migration CentOS Ubuntu

7月2日 00:05 投稿