学习笔记-机器学习-搭建环境-2:Linux下Docker的安装(并手动配置 direct-lvm 给 devicemapper)

目录

一、安装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 准备工作:创建分区”

2.根据官网进行操作:https://docs.docker.com/storage/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production

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,说明配置成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章