目錄:
一、安裝Docker
二、CentOS/RHEL配置 direct-lvm 給 devicemapper
一、安裝Docker
參考:https://docs.docker.com/install/linux/docker-ce/centos
根據官網要求,需要至少maintained的CentOs7版本
查看Linux版本:
cat /proc/version
cat /etc/centos-release
結果顯示我的Linux是CentOs 7.6的
卸載舊版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
使用yum安裝:
# 安裝依賴包
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加yum軟件源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 更新軟件源
$ sudo yum makecache fast
# 安裝Docker CE
$ sudo yum install docker-ce docker-ce-cli containerd.io
# 啓動Docker CE
$ sudo systemctl start docker
測試Docker是否安裝正確:
$ docker run hello-world
結果如圖,則安裝正確:
配置國內鏡像加速:
https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror
# 創建daemon.json文件
$ sudo nano /etc/docker/daemon.json
# 寫入
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 重新啓動服務
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
檢查加速器是否生效:
$ docker info
看到下面的內容說明配置成功。
二、CentOS/RHEL配置 direct-lvm 給 devicemapper
在 Ubuntu/Debian 上有 UnionFS
可以使用,而 CentOS 和 RHEL 的內核中沒有相關驅動。因此對於這類系統,一般使用 devicemapper
驅動利用 LVM 的一些機制來模擬分層存儲,這樣的做法除了性能比較差外,穩定性一般也不好,而且配置相對複雜。Docker 安裝在 CentOS/RHEL 上後,爲了簡化配置會默認選擇 devicemapper,
其 devicemapper
是跑在一個稀疏文件模擬的塊設備上,也被稱爲 loop-lvm,
但是其穩定性、性能更差。解決辦法是配置塊設備給 devicemapper
驅動做存儲層的做法,這類做法也被稱爲配置 direct-lvm
。除了前面說到的問題外,devicemapper
+ loop-lvm
還有一個缺陷,因爲它是稀疏文件,所以它會不斷增長。用戶在使用過程中會注意到 /var/lib/docker/devicemapper/devicemapper/data
不斷增長,而且無法控制。這個稀疏文件的空間釋放後基本不進行垃圾回收的問題。因此往往會出現即使刪除了文件內容,空間卻無法回收,隨着使用這個稀疏文件一直在不斷增長。
所以對於 CentOS/RHEL 的用戶來說,在沒有辦法使用 UnionFS
的情況下,一定要配置 direct-lvm
給 devicemapper
,無論是爲了性能、穩定性還是空間利用率。
我使用的手動配置DIRECT-LVM模式:
1. 使用fdisk爲接下來的操作劃分出分區/dev/sda6
參考:https://blog.csdn.net/RambleMY/article/details/89247881 的“3.1 準備工作:創建分區”
sudo systemctl stop docker
sudo pvcreate /dev/sda6
sudo vgcreate docker /dev/sda6
sudo lvcreate --wipesignatures y -n thinpool docker -l 95%VG
sudo lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
sudo lvconvert -y \
--zero n \
-c 512K \
--thinpool docker/thinpool \
--poolmetadata docker/thinpoolmeta
sudo vi /etc/lvm/profile/docker-thinpool.profile
# 寫入
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}
sudo lvchange --metadataprofile docker-thinpool docker/thinpool
sudo lvchange --monitor y docker/thinpool
sudo vi /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"
]
}
sudo rm -rf /var/lib/docker
sudo systemctl start docker
sudo service docker start
docker info
如圖:storage driver: devicemapper,並且pool name: docker-thinpool,說明配置成功。