Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Bluemix 虛擬機 Docker 遷移至 direct-lvm 儲存驅動程式完整實戰

編輯:Linux 系統常見問題解答

Docker 預設使用 loop-lvm (稀疏檔案模式) 作為 devicemapper 後端儲存,**官方明確不建議生產環境使用**。本文記錄在 Bluemix 虛擬機 (CentOS 7.2、Docker 1.12) 上,將儲存驅動遷移至生產級 direct-lvm (區塊裝置精簡置備池) 的完整操作流程。

現狀確認

docker info
# 輸出關鍵警告:
# WARNING: Usage of loopback devices is strongly discouraged for production use.
# Data file: /dev/loop0, Metadata file: /dev/loop1

遷移步驟

1. 停止 Docker 服務

systemctl stop docker

2. 新增磁碟並建立 LVM 精簡池

# 查看新磁碟 (假設為 /dev/sdb)
fdisk -l /dev/sdb

# 建立 PV
pvcreate /dev/sdb

# 建立 VG (命名為 docker)
vgcreate docker /dev/sdb

# 建立資料 LV (佔 VG 95%)
lvcreate --wipesignatures y -n thinpool docker -l 95%VG

# 建立中繼資料 LV (佔 VG 1%,不可超過 16GB)
lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG

3. 轉換為精簡池

# 將 thinpool 轉為精簡池,chunk size 512KB,清零前 4KB
lvconvert -y --zero n -c 512k --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

4. 建立並套用精簡池自動擴充設定檔

# 建立設定檔
mkdir -p /etc/lvm/profile
cat > /etc/lvm/profile/docker-thinpool.profile <<'EOF'
activation {
    thin_pool_autoextend_threshold=80  # 使用達 80% 自動擴充
    thin_pool_autoextend_percent=20    # 每次擴充 20%
}
EOF

# 套用設定檔
lvchange --metadataprofile docker-thinpool docker/thinpool

5. 配置 Docker 使用 direct-lvm

# 編輯 /etc/docker/daemon.json (不存在則建立)
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.thinpooldev=/dev/mapper/docker-thinpool",
    "dm.use_deferred_removal=true",
    "dm.use_deferred_deletion=true"
  ]
}

6. 啟動 Docker 並驗證

systemctl start docker
docker info
# 驗證輸出:
# Storage Driver: devicemapper
# Pool Name: docker-thinpool
# Data file: /dev/mapper/docker-thinpool  (不再是 loop 裝置)
# WARNING: loopback devices 警告消失

關鍵技術點補充

  • Device Mapper:Linux 核心層級邏輯卷管理框架,Docker devicemapper 驅動基於其精簡置備與快照功能
  • loop-lvm vs direct-lvm:前者用檔案模擬區塊裝置 (效能差、不穩定);後者直接使用真實區塊裝置/LV (生產級)
  • chunk size 512KB:平衡效能與空間效率,小檔案多建議 64-128KB,大檔案建議 1-2MB
  • 自動擴充:thin_pool_autoextend_threshold/percent 防止池滿導致寫入失敗,關鍵生產環境保護機制
  • deferred removal/deletion:非同步刪除容器層,大幅提升刪除大量容器時的效能

驗證清單

  1. docker info 無 loopback 警告
  2. lvs 顯示 docker-thinpool 狀態正常
  3. 建立/刪除容器測試正常
  4. docker system df 空間統計合理
Copyright © Windows教程網 All Rights Reserved