剛開始使用docker時(shí),不太關(guān)注docker 存儲(chǔ)鏡像和容器的位置,使用默認(rèn)目錄。當(dāng)使用docker啟動(dòng)的容器越來越多時(shí),鏡像和容器占用空間也越來越大。特別是使用Linux云服務(wù)器ECS的情況下,默認(rèn)系統(tǒng)盤大小有限,默認(rèn)目錄是在系統(tǒng)盤,很容易就將磁盤占滿,導(dǎo)致無法重新啟動(dòng)更多的容器。
下面以CentOS 7為例,講解如何修改docker的默認(rèn)存儲(chǔ)位置。修改默認(rèn)存儲(chǔ)位置,分為兩種情況:
- 保留原有鏡像和容器
- 不保留原有鏡像和容器
1 保留原有鏡像和容器
操作方法要點(diǎn):將原有的鏡像和容器移動(dòng)到新的位置,并在原來的目錄創(chuàng)建軟鏈接,軟鏈接指向新的鏡像和容器存儲(chǔ)位置。
例如,CentOS 7默認(rèn)docker存儲(chǔ)位置是/var/lib/docker,新的存儲(chǔ)位置:/mnt/data/docker
操作步驟命令:
- 確認(rèn)當(dāng)前的docker存儲(chǔ)位置
# docker info
找到Server下的Docker Root Dir標(biāo)記,內(nèi)容是當(dāng)前docker鏡像和容器的存儲(chǔ)位置。
- 停止docker服務(wù)
systemctl stop docker
- 將原有數(shù)據(jù)移動(dòng)到目標(biāo)位置
例如,CentOS 7默認(rèn)docker存儲(chǔ)位置是/var/lib/docker,新的存儲(chǔ)位置:/mnt/data/docker
cp -rp /var/lib/docker /mnt/data/docker
- 創(chuàng)建軟連接指向?qū)嶋H存儲(chǔ)位置
!!!強(qiáng)烈建議操作之前先進(jìn)行備份!!!
# 備份
mv /var/lib/docker /var/lib/docker-bak-20211202
# 創(chuàng)建軟連接/var/lib/docker,指向新的存儲(chǔ)位置/mnt/data/docker
ln -s /mnt/data/docker /var/lib/docker
- 啟動(dòng)docker服務(wù)
systemctl start docker
- 修改結(jié)果確認(rèn)
運(yùn)行docker info
,檢查Server下的Docker Root Dir標(biāo)記,顯示的路徑應(yīng)該是新的docker鏡像和容器存儲(chǔ)位置,如本例的/mnt/data/docker
。
2 不保留原有鏡像和容器
例如,CentOS 7默認(rèn)docker存儲(chǔ)位置是/var/lib/docker,新的存儲(chǔ)位置:/mnt/data/docker
- 確認(rèn)當(dāng)前的docker存儲(chǔ)位置
# docker info
找到Server下的(1) Docker Root Dir標(biāo)記,內(nèi)容是當(dāng)前docker鏡像和容器的存儲(chǔ)位置;(2)Storage Driver標(biāo)記,內(nèi)容是存儲(chǔ)驅(qū)動(dòng)器名稱。
- 停止docker服務(wù)
systemctl stop docker
- 創(chuàng)建drop-in目錄和drop-in文件
mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/docker.conf
echo "[Service]">>/etc/systemd/system/docker.service.d/docker.conf
echo "ExecStart=">>/etc/systemd/system/docker.service.d/docker.conf
echo "ExecStart=/usr/bin/dockerd --graph="/mnt/data/docker" --storage-driver=overlay2">>/etc/systemd/system/docker.service.d/docker.conf
/mnt/data/docker
是新的存儲(chǔ)位置,而overlay2
是當(dāng)前docker所使用的存儲(chǔ)驅(qū)動(dòng)。
- 重新加載服務(wù)守護(hù)程序和啟動(dòng)docker服務(wù)
systemctl daemon-reload
systemctl start docker
- 修改結(jié)果確認(rèn)
運(yùn)行docker info
,檢查Server下的Docker Root Dir標(biāo)記,顯示的路徑應(yīng)該是新的docker鏡像和容器存儲(chǔ)位置,如本例的/mnt/data/docker
。