學習筆記-機器學習-搭建環境-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,說明配置成功。

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