我的docker随笔45:在龙芯平台安装docker

本文介绍在龙芯平台安装docker。

前言

2017年下半年开始接触docker时,那会李大锤刚刚会爬,而今年(2024年)下半年,李大锤已经是一个经常考得C并且经常和妹妹吵架的二年级学生了。这么多年就过去,docker一直陪伴着我的工作,正如我一直陪伴着大锤大妞的成长一样。

最近手上正好有台龙芯机器,恰好要做适配,刚好想研究不同平台的容器部署,于是就趁机尝试安装docker

环境

本文使用的软硬件说明如下。

处理芯片为Loongson-3A5000-LL,操作系统为麒麟桌面版,龙芯环境为旧世界。

CPU详情:

# cat /proc/cpuinfo 
system type             : generic-loongson-machine
processor               : 0
package                 : 0
core                    : 0
cpu family              : Loongson-64bit
model name              : Loongson-3A5000-LL
CPU Revision            : 0x14
FPU Revision            : 0x00
CPU MHz                 : 1800.00
BogoMIPS                : 3600.00
TLB entries             : 2112
Address sizes           : 48 bits physical, 48 bits virtual
isa                     : loongarch32 loongarch64
features                : cpucfg lam ual fpu lsx lasx crc32 complex crypto lvz lbt_x86 lbt_arm lbt_mips
hardware watchpoint     : yes, iwatch count: 8, dwatch count: 8
...

操作系统详情:

# cat /etc/os-release 
NAME="Kylin"
VERSION="银河麒麟桌面操作系统V10 (SP1)"
VERSION_US="Kylin Linux Desktop V10 (SP1)"
ID=kylin
ID_LIKE=debian
PRETTY_NAME="Kylin V10 SP1"
VERSION_ID="v10"
HOME_URL="http://www.kylinos.cn/"
SUPPORT_URL="http://www.kylinos.cn/support/technology.html"
BUG_REPORT_URL="http://www.kylinos.cn/"
PRIVACY_POLICY_URL="http://www.kylinos.cn"
VERSION_CODENAME=kylin
UBUNTU_CODENAME=kylin
PROJECT_CODENAME=V10SP1
KYLIN_RELEASE_ID="2403"

下载

docker的官方下载地址只提供了x86和arm架构的安装包。在龙芯系统里用apt-get install docker-ce命令安装,提示无候选包。经过搜索,在网上找到相关帖子,顺道找到github上已经编译好的安装包。

龙芯版docker安装包下载为:https://github.com/wojiushixiaobai/docker-ce-binaries-loongarch64/releases,本文选用今年(2024年)1月下旬发布的版本,文件名为docker-25.0.0.tgz。同时找该版本相近时间发布的docker-compose,地址为:https://github.com/wojiushixiaobai/compose-loongarch64/releases,版本是v2.24.0

安装

下载安装包后将其上传到机子。

解压文件

解压到相应目录:

tar xf docker-25.0.0.tgz -C /tmp
sudo mv /tmp/docker/* /usr/local/bin/mkdir -p /usr/libexec/docker/cli-plugins/
cp docker-compose-linux-loongarch64 /usr/libexec/docker/cli-plugins/docker-composechmod +x /usr/libexec/docker/cli-plugins/docker-compose

注意,上面是拷贝docker目录里的二进制可执行文件到/usr/local/bin/。该目录文件如下:

$ ls /usr/local/bin/
containerd  containerd-shim-runc-v2  ctr  docker  dockerd  docker-init  docker-proxy  runc
添加配置

新建Docker 配置文件为/etc/docker/daemon.json 。默认不存在。

# mkdir /etc/docker
# cat > /etc/docker/daemon.json <<-EOF
{"registry-mirrors": ["https://a8qh6yqv.mirror.aliyuncs.com","http://hub-mirror.c.163.com"],"insecure-registries": ["172.18.18.168:5000","10.10.1.8:5000"],"exec-opts": ["native.cgroupdriver=systemd"],"data-root": "/data/docker","log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"}
}
EOF

上述配置文件指定了docker镜像存储在/data/docker中,并指定了加速器和内部镜像仓库。根据实际情况修改。

新建systemctl启动所需的/etc/systemd/system/docker.service文件,内容如下:

# vim /etc/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
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/local/bin/dockerd --default-ulimit nofile=65535:65535
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target
启动服务

启动:

systemctl start docker

查看状态:

systemctl status docker

输出结果:

# systemctl status docker
Warning: The unit file, source configuration file or drop-ins of docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
● docker.service - Docker Application Container EngineLoaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: enabled)Active: active (running) since Tue 2024-11-12 14:39:46 CST; 9s agoDocs: https://docs.docker.comMain PID: 91011 (dockerd)Tasks: 21 (limit: 19233)Memory: 36.2MCGroup: /system.slice/docker.service├─91011 /usr/local/bin/dockerd --default-ulimit nofile=65535:65535└─91022 containerd --config /var/run/docker/containerd/containerd.toml

设置开机启动:

systemctl daemon-reload
systemctl enable docker
查看进程

docker启动后,会运行2个进程服务,除了dockerd进程外,还在containerd进程。如下:

$ ps aux | grep docker
root       91011  0.0  0.3 2023520 58832 ?       Ssl  14:39   0:00 /usr/local/bin/dockerd --default-ulimit nofile=65535:65535
root       91022  0.0  0.1 1929712 30576 ?       Ssl  14:39   0:00 containerd --config /var/run/docker/containerd/containerd.toml
修改权限

如果使用普通用户执行docker命令,会出现错误,如下:

$ docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

这是因为普通用户权限不足造成的。先看一下出错信息/var/run/docker.sock文件的权限。

$ ll /var/run/docker.sock
srw-rw---- 1 root root 0 11月 12 14:39 /var/run/docker.sock=

该文件权限为root,所属root组。离线安装的docker没有docker组,因此将该文件权限修改如下:

sudo chmod 777  /var/run/docker.sock

这样普通用户能执行docker命令了。

查看版本号:

$ docker version
Client:Version:           25.0.0API version:       1.44Go version:        go1.21.5Git commit:        e758fe5Built:             Sun Jan 21 04:36:23 2024OS/Arch:           linux/loong64Context:           defaultServer:Engine:Version:          25.0.0API version:      1.44 (minimum version 1.24)Go version:       go1.21.5Git commit:       615dfdf67264ed5b08dd5e86657bf0e580731ceaBuilt:            Sun Jan 21 04:36:55 2024OS/Arch:          linux/loong64Experimental:     falsecontainerd:Version:          v1.7.12GitCommit:        71909c1814c544ac47ab91d2e8b84718e517bb99runc:Version:          1.1.11GitCommit:        v1.1.11-0-g4bccb38docker-init:Version:          0.19.0GitCommit:        de40ad0

测试

曾几何时,hub.docker.com可以畅通访问并能下载镜像,现在已经无法访问了。真是岁月不居,时节如流,日月如梭,沧海桑田。

幸好,龙芯有官方的镜像仓库,地址为https://lcr.loongnix.cn/search。搜索未发现有gcc镜像,但有debian镜像。

尝试拉取镜像:

$ time docker pull lcr.loongnix.cn/library/debian
Using default tag: latest
latest: Pulling from library/debian
5755e6e26c6c: Pull complete 
Digest: sha256:0356df4e494bbb86bb469377a00789a5b42bbf67d5ff649a3f9721b745cbef77
Status: Downloaded newer image for lcr.loongnix.cn/library/debian:latest
lcr.loongnix.cn/library/debian:latestreal    33m7.466s
user    0m0.139s
sys     0m0.022s

运行之:

$ docker run -it --rm lcr.loongnix.cn/library/debian bash
root@136affeb24e5:/# 
exit$ docker run -it --rm lcr.loongnix.cn/library/debian bash
root@9086b74f2d84:/# 
exit

使用bash直接退出了。换sh试试:

$ docker run -it --rm lcr.loongnix.cn/library/debian sh
# uname d^C^C^C^C^C^C^Z^C

能进入容器,但执行命令卡住。尝试在启动容器时执行命令:

$ docker run -it --rm lcr.loongnix.cn/library/debian uname -a
Linux 264b55e053b0 5.4.18-110-generic #99-KYLINOS SMP Fri Mar 29 09:24:59 UTC 2024 loongarch64 GNU/Linux

查看镜像发行版本信息,如下:

$ docker run -it --rm lcr.loongnix.cn/library/debian cat /etc/issue
Debian GNU/Linux trixie/sid \n \l

后面在其它帖子找到GitHub 镜像仓库(ghcr.io),上面有debian镜像,尝试拉取:

$ docker pull ghcr.io/loong64/debian:trixie
trixie: Pulling from loong64/debian
7a50cba388e3: Pull complete 
Digest: sha256:0aebb2809e98b7eeec4d8cc51b79bac709b84ea563c800d752b96b6a57d8937f
Status: Downloaded newer image for ghcr.io/loong64/debian:trixie
ghcr.io/loong64/debian:trixie

查看镜像发行版本信息,如下:

$ docker run -it --rm ghcr.io/loong64/debian:trixie cat /etc/issue
Debian GNU/Linux trixie/sid \n \l

两者应该是同源构建的,查看当前镜像列表,2者体积相差不大。

$ docker images
REPOSITORY                       TAG       IMAGE ID       CREATED        SIZE
ghcr.io/loong64/debian           trixie    47801f83a510   36 hours ago   126MB
lcr.loongnix.cn/library/debian   latest    53a1255560be   5 months ago   122MB

在相同网络,相近时间进行相同操作,一个耗时30秒,一个耗时30分钟,但不懂为何官方的仓库下载如此耗时。

小结

通过本文的实践,可以成功在龙芯机器上安装docker,不过目前还没有找到合用的镜像。原因待查,后面还要继续研究。

问题及解决

直接执行dockerd命令,提示如下:

# /usr/local/docker/dockerd 
invalid userland-proxy-path: userland-proxy is enabled, but userland-proxy-path is not set

userland-proxy设置为false即可:

/usr/local/bin/dockerd --userland-proxy=false

不过,使用systemctl启动时,无法添加userland-proxy标志也能启动。

参考资料
  • 参考资料:https://bbs.loongarch.org/d/248-loongnix-docker/3
  • 龙芯docker 安装包下载:https://github.com/wojiushixiaobai/docker-ce-binaries-loongarch64/releases
  • 龙芯docker-compose 安装包下载:https://github.com/wojiushixiaobai/compose-loongarch64/releases
  • docker.service文件:https://github.com/wojiushixiaobai/docker-ce-binaries-loongarch64/blob/master/docker.service
  • 龙芯的镜像仓库:https://cr.loongnix.cn/search
  • docker官方下载地址:https://download.docker.com/linux/static/stable/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472494.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python安装(ubuntu)

一&#xff1a;安装指定版本的python python3 --version直接返回ubuntu自带的3.8.10的版本 radarswradarsw-Precision-5560:~$ python3 --version Python 3.8.10通过指令直接安装&#xff0c;会报错如下; radarswradarsw-Precision-5560:~$ sudo apt install python3.11 正在…

大模型基础BERT——Transformers的双向编码器表示

大模型基础BERT——Transformers的双向编码器表示 整体概况 BERT&#xff1a;用于语言理解的深度双向Transform的预训练 论文题目&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Bidirectional Encoder Representations from…

云计算复习文档

云计算复习文档 一 云计算概述 名词&#xff1a; 云计算 1.0 &#xff1a; 面向数据中心管理员的IT基础设施资源虚拟化阶段 通过计算虚拟化技术将企业IT应用与底层的基础设施彻底分离、解耦 将多个企业IT应用实例及运行环境复用在相同的物理服务器上&#xff0c;并通过虚…

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所&#xff08;NIMH&#xff09;的数据&#xff0c;到 2021 年&#xff0c;22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内&#xff0c;精神疾病占非致命性疾病负担的 30%&#xff0c;并被世界…

Tensorflow基本概念

简介&#xff1a;本文从Graph讲到Session&#xff0c;同时讲解了tf.constant创建tensor的用法和variable需要初始化的知识点&#xff0c;可以给你打好一个学习Tensorflow的基础。本文都是基于TensorFlow1.14.0的版本下运行。 本专栏将会系统的讲解TensorFlow在1.14.0版本下的各…

Ubuntu+ROS 机械臂拾取和放置

官方链接&#xff1a;https://github.com/skumra/baxter-pnp 1.下载并安装 SDK 依赖项 sudo apt-get install python-wstool python-rosdep 2.创建新的 catkin 工作区 mkdir -p ~/ros_ws/src cd ~/ros_ws/src 3.使用 wstool 下载 rosinstall 文件并将其复制到 Catkin 工作区…

w~视觉~合集23

我自己的原文哦~ https://blog.51cto.com/whaosoft/12548542 #DragGAN 在 AIGC 的神奇世界里&#xff0c;我们可以在图像上通过「拖曳」的方式&#xff0c;改变并合成自己想要的图像。比如让一头狮子转头并张嘴&#xff1a; 实现这一效果的研究出自华人一作领衔的「Drag You…

从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用

附上LM317系列选型&#xff1a; LM317BD2TG-TO-263 LM317BTG-TO-220 LM317BD2TR4G-TO-263 LM317D2TG-TO-263 LM317D2TR4G-TO-263 LM317TG-TO-220 LM317LBDR2G-SOP-8 LM317LDR2G-SOP-8 LM317MABDTG-TO-252 LM317MABDTRKG-TO-252 LM317MA…

【已解决】git push一直提示输入用户名及密码、fatal: Could not read from remote repository的问题

问题描述&#xff1a; 在实操中&#xff0c;git push代码到github上一直提示输入用户名及密码&#xff0c;并且跳出的输入框输入用户名和密码后&#xff0c;报错找不到远程仓库 实际解决中&#xff0c;发现我环境有两个问题解决&#xff1a; git push一直提示输入用户名及密码…

测试实项中的偶必现难测bug--互斥逻辑异常

问题: 今天线上出了一个很奇怪的问题,看现象和接口是因为数据问题导致app模块奔溃 初步排查数据恢复后还是出现了数据重复的问题,查看后台实际只有一条数据,但是显示在app却出现了两条一模一样的置顶数据 排查: 1、顺着这个逻辑,我们准备在预发复现这个场景,先是cop…

二五、pxe自动装机

pxe自动装机 pxe------------------------------自动安装系统必要的运行环境 无人值守--------------------为系统定制化的安装需要的软件 pxe的优点&#xff1a; 1、规模化&#xff1a;同时装配多台服务器&#xff08;20-30&#xff09; 2、自动化&#xff1a;系统安装和…

算法魅力-二分查找实战

目录 前言 算法定义 朴素二分模版 二分查找 二分的边界查找 在排序数组中查找元素的第一个和最后一个位置&#xff08;medium&#xff09; 暴力算法 二分查找 边界查找分析 山峰数组的峰顶 暴力枚举 二分查找 搜索旋转排序数组中的最小值&#xff08;medium&#xf…

# 第20章 Cortex-M4-触摸屏

第20章 Cortex-M4-触摸屏 20.1 触摸屏概述 20.1.1 常见的触摸屏分类 电阻式触摸屏、电容式触摸屏、红外式触摸屏、表面声波触摸屏 市场上用的最多的是电阻式触摸屏与电容式触摸屏。红外管式触摸屏多用于投影仪配套设备。 电阻式触摸屏构成&#xff1a;整个屏由均匀电阻构成…

大数据新视界 -- 大数据大厂之 Impala 性能优化:基于数据特征的存储格式选择(上)(19/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Gitcode文件历史记录查看和还原

文件历史记录 文件历史记录用于记录代码文件的更改历史&#xff0c;它允许用户查看文件的不同版本&#xff0c;了解每个版本的修改内容、作者和提交消息。这对于跟踪文件演进、恢复错误更改、审查代码以及了解项目进展都非常有用。 文件历史记录功能提供了以下核心功能&#…

数据结构-二叉树及其遍历

🚀欢迎来到我的【数据结构】专栏🚀 🙋我是小蜗,一名在职牛马。🐒我的博客主页​​​​​​ ➡️ ➡️ 小蜗向前冲的主页🙏🙏欢迎大家的关注,你们的关注是我创作的最大动力🙏🙏🌍前言 本篇文章咱们聊聊数据结构中的树,准确的说因该是只说一说二叉树以及相…

Java集合(Collection+Map)

Java集合&#xff08;CollectionMap&#xff09; 为什么要使用集合&#xff1f;泛型 <>集合框架单列集合CollectionCollection遍历方式List&#xff1a;有序、可重复、有索引ArrayListLinkedListVector&#xff08;已经淘汰&#xff0c;不会再用&#xff09; Set&#xf…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…

C++- 基于多设计模式下的同步异步日志系统

第一个项目:13万字,带源代码和详细步骤 目录 第一个项目:13万字,带源代码和详细步骤 1. 项目介绍 2. 核心技术 3. 日志系统介绍 3.1 为什么需要⽇志系统 3.2 ⽇志系统技术实现 3.2.1 同步写⽇志 3.2.2 异步写⽇志 4.知识点和单词补充 4.1单词补充 4.2知识点补充…