目录:
一、安装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,说明配置成功。