由于要推广信创,需要把Milvus向量数据库从别的平台迁移到信创平台上,为了能顺利迁移,在迁移前需要做一系列用到的功能软件的安装与运行的测试,由于Milvus向量数据库依赖于Docker运行,以及工作性质的要求,只能离线安装Docker。下面会具体介绍安装方法,以及在安装过程中遇到的问题和解决方案。
一、准备Docker环境
由于个人对软件安装的规化要求(统一规化好管理),需要提前创建好docker和containerd安装的目录。
自己创建的安装目录为/iwen/docker和/iwen/containerd,大家也可以根据自己的实际要求规化其它目录。
[root@kylinv10-sp1-iwen ~]# mkdir -pv /iwen/docker
[root@kylinv10-sp1-iwen ~]# mkdir -pv /iwen/containerd
创建好目录之后,要下载对应的docker版本和containerd版本,我自己用的是docker-27.0.1.tgz和containerd-1.7.19-linux-amd64.tar.gz。大家可以根据自己的要求选择不同的版本进行下载安装。
docker下载地址:
https://download.docker.com/linux/static/stable/x86_64/
containerd下载地址:
https://github.com/containerd/containerd/releases
注:docker的启动前提,是要依赖于containerd,所以要先安装containerd,不过也可以后续安装,大家可以根据个人爱好安排安装顺序。
1.1、安装containerd
containerd的安装非常简单,解压到规定的目录下,配置好环境变量即可。具体操作如下:
1.2.2、解压containerd
[root@kylinv10-sp1-iwen ~]# cd /iwen/containerd
[root@kylinv10-sp1-iwen containerd]# tar -xf containerd-1.7.19-linux-amd64.tar.gz
1.2.3、配置containerd环境变量和生效环境变量
[root@kylinv10-sp1-iwen containerd]# vi /etc/profile.d/containerd.sh
把以下内容添加进入保存即可
CONTAINERD_HOME=/iwen/containerd
PATH=$PATH:$CONTAINERD_HOME/bin
export PATH CONTAINERD_HOME
[root@kylinv10-sp1-iwen containerd]# source /etc/profile.d/containerd.sh
1.2.4、配置containerd.service
[root@kylinv10-sp1-iwen containerd]# vi /usr/lib/systemd/system/ containerd.service
把以下内容添加进入保存即可
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target dbus.service
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/iwen/containerd/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
需要注意“ExecStart”部分,要根据containerd安装目录进行修改。
如果不想使用该配置文件containerd.service,也可以从以下地址进行下载修改:
GitHub - containerd/containerd: An open and reliable container runtime
1.2.5、加载containerd.service
[root@kylinv10-sp1-iwen containerd]# systemctl daemon-reload
1.2.6、启动containerd.service
[root@kylinv10-sp1-iwen containerd]# systemctl start containerd.service
没有提示说明启动成功
1.2.7、检查containerd启动状态
[root@kylinv10-sp1-iwen ~]# systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-11-20 08:21:39 CST; 1h 5min ago
Docs: https://containerd.io
Main PID: 1873 (containerd)
Tasks: 9
Memory: 58.6M
CGroup: /system.slice/containerd.service
└─1873 /iwen/containerd/bin/containerd
其中Active状态是running状态,说明containerd已正常启动,并且安装和启动已没有问题。接下来就是要安装docker了。
1.2、安装docker
docker的安装相对于containerd的安装稍微有点复杂,详细操作如下:
1.2.1、解压docker
在解压之前,需要在/iwen/docker目录下创建bin目录和对应的data、lib、docker目录,其目的是为了让docker的可执行二制文件统一放在bin目录好管理,其中data、lib、docker是为了存docker的数据用的。大家可以根据自己的需要进行创建。
如下操作:
[root@kylinv10-sp1-iwen ~]# cd /iwen/docker
[root@kylinv10-sp1-iwen docker]# mkdir -pv ./data/lib/docker
[root@kylinv10-sp1-iwen docker]# mkdir ./bin
[root@kylinv10-sp1-iwen docker]# tar -xf docker-27.0.1.tgz
[root@kylinv10-sp1-iwen docker]# cd ./docker
[root@kylinv10-sp1-iwen docker]# cp * ../bin
[root@kylinv10-sp1-iwen docker]# cd /iwen/docker
[root@kylinv10-sp1-iwen docker]# rm -rf docker
1.2.3、配置docker环境变量和生效环境变量
[root@kylinv10-sp1-iwen docker]# vi /etc/profile.d/docker.sh
把以下内容添加进入保存即可
DOCKER_HOME=/iwen/docker
PATH=$PATH:$DOCKER_HOME/bin
export PATH DOCKER_HOME
[root@kylinv10-sp1-iwen docker]# source /etc/profile.d/docker.sh
1.2.4、配置docker.service
[root@kylinv10-sp1-iwen docker]# vi /usr/lib/systemd/system/docker.service
把以下内容添加进入保存即可
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/iwen/docker/bin/dockerd --data-root /iwen/docker/data/lib/docker --userland-proxy-path=/iwen/docker/bin/docker-proxy
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
需要注意标红部分,要根据docker安装目录进行修改。
其中要注意的是“/iwen/docker/bin/dockerd”后要面的参数,版本不同其中参数也不同,具体可参照以下文档:
如何解决Docker启动时报Status: unknown flag: --graph问题-CSDN博客
1.2.5、加载docker.service
[root@kylinv10-sp1-iwen docker]# systemctl daemon-reload
1.2.6、启动docker.service
[root@kylinv10-sp1-iwen docker]# systemctl start docker.service
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
启动docker时报错了,可以根据提示利用“journalctl -xe”查看报错日志。日志截图如下:
图片中的内容大家有可能看不清楚,以下是报错日志中最重要的部分。
11月 20 13:48:25 kylinv10-sp1-iwen dockerd[10263]: time="2024-11-20T13:48:25.423673778+08:00" level=warning msg="Failed to retrieve default runtime version" error="failed to retrieve runc version: exec: \"runc\": executable file not found in $PATH"
11月 20 13:48:25 kylinv10-sp1-iwen dockerd[10263]: time="2024-11-20T13:48:25.425945365+08:00" level=warning msg="Failed to find docker-init" error="exec: \"docker-init\": executable file not found in $PATH"
看报错的意思是说docker在进行启动时,无法在环境变量中检索到runc和docker-init这2个命令,但使用which命令查看这2个命令是可以通过环境变量检索到的。如下如示:
[root@kylinv10-sp1-iwen iwen]# which docker-init
/iwen/docker/bin/docker-init
[root@kylinv10-sp1-iwen iwen]# which runc
/iwen/docker/bin/runc
为了验证这个问题,用同样的方法又在银河麒麟V10-SP3的版本上安装和启动是没有问题的,通过多方查找资料发现银河麒麟V10-SP1版本不支持自定义目录安装和启动docker,需要把docker的可执行文件放到/usr/bin下才可以(为了解决这个问题耗费了不少时间和精力)。
注:大家在银河麒麟V10-SP1的ARM架构上安装时,也会出现同样的问题,可以尝试一下这个解决方法。
所以可以采用以下方法解决此问题,具体操作如下:
1.2.6.1、删除原来docker的环境变量
[root@kylinv10-sp1-iwen iwen]# rm /etc/profile.d/docker.sh
1.2.6.2、docker可执行文件创建软连接
[root@kylinv10-sp1-iwen bin]# cd /usr/bin
执行以下命令,把docker的bin目录下可执行文件软连接到该目录下。
ln -sv /iwen/docker/bin/runc runc
ln -sv /iwen/docker/bin/docker-proxy docker-proxy
ln -sv /iwen/docker/bin/docker-init docker-init
ln -sv /iwen/docker/bin/dockerd dockerd
ln -sv /iwen/docker/bin/docker docker
ln -sv /iwen/docker/bin/ctr ctr
ln -sv /iwen/docker/bin/containerd-shim-runc-v2 containerd-shim-runc-v2
ln -sv /iwen/docker/bin/containerd containerd
执行完的结果如下图所示:
1.2.6.3、修改docker.service
[root@kylinv10-sp1-iwen iwen]# vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --data-root /iwen/docker/data/lib/docker --userland-proxy-path=/usr/bin/docker-proxy
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
需要注意“ExecStart”部分,可执行命令需要修改成所在目录/usr/bin。
1.2.6.4、重新加载docker.service
[root@kylinv10-sp1-iwen iwen]# systemctl daemon-reload
1.2.6.5、启动docker
[root@kylinv10-sp1-iwen iwen]# systemctl start docker.service
没有输出内容,并且没有报错,说明可以正常启动了。
1.2.6.6、检查docker启动状态
[root@kylinv10-sp1-iwen iwen]# systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2024-11-20 14:10:19 CST; 7s ago
Docs: https://docs.docker.com
Main PID: 10633 (dockerd)
Tasks: 9
Memory: 17.3M
CGroup: /system.slice/docker.service
└─10633 /usr/bin/dockerd --data-root /iwen/docker/data/lib/docker --userland-proxy-path=/usr/bin/docker-proxy
其中Active状态是running状态,说明docker已经正常启动了。到此为止银河麒麟V10-SP1版本上安装docker已成功完成。
疑问:
但还是不清楚,为什么不能使用自己规化的目录来安装和启动docker(银河麒麟V10-SP3版本可以,银河麒麟V10-SP1版不可以),如果大家有解决方法,还恳请大家能留下保贵的解决方案以供学习。