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

systemctl stop docker
# 查看新磁碟 (假設為 /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
# 將 thinpool 轉為精簡池,chunk size 512KB,清零前 4KB
lvconvert -y --zero n -c 512k --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta
# 建立設定檔
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
# 編輯 /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"
]
}
systemctl start docker
docker info
# 驗證輸出:
# Storage Driver: devicemapper
# Pool Name: docker-thinpool
# Data file: /dev/mapper/docker-thinpool (不再是 loop 裝置)
# WARNING: loopback devices 警告消失
thin_pool_autoextend_threshold/percent 防止池滿導致寫入失敗,關鍵生產環境保護機制docker info 無 loopback 警告lvs 顯示 docker-thinpool 狀態正常docker system df 空間統計合理