我的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-compose

chmod +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 Engine
     Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-11-12 14:39:46 CST; 9s ago
       Docs: https://docs.docker.com
   Main PID: 91011 (dockerd)
      Tasks: 21 (limit: 19233)
     Memory: 36.2M
     CGroup: /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.0
 API version:       1.44
 Go version:        go1.21.5
 Git commit:        e758fe5
 Built:             Sun Jan 21 04:36:23 2024
 OS/Arch:           linux/loong64
 Context:           default

Server:
 Engine:
  Version:          25.0.0
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.5
  Git commit:       615dfdf67264ed5b08dd5e86657bf0e580731cea
  Built:            Sun Jan 21 04:36:55 2024
  OS/Arch:          linux/loong64
  Experimental:     false
 containerd:
  Version:          v1.7.12
  GitCommit:        71909c1814c544ac47ab91d2e8b84718e517bb99
 runc:
  Version:          1.1.11
  GitCommit:        v1.1.11-0-g4bccb38
 docker-init:
  Version:          0.19.0
  GitCommit:        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:latest

real    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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web——upload-labs——第五关——大小写绕过绕过

先上传一个 先尝试直接上传一个普通的一句话木马 不行 可以看到&#xff0c;.htaccess文件也被过滤了&#xff0c;我们来查看一下源码 第五关的源码没有把字符强制转换为小写的语句&#xff1a; $file_ext strtolower($file_ext); //转换为小写 直接通过Burpsuite抓包修改文…

C#/WinForm拖拽文件上传

一、首先创建一个上传文件的类&#xff0c;继承Control类&#xff0c;如下&#xff1a; public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制&#xff0c;而不使用操作系统的绘制Cont…

oracle查询字段类型长度等字段信息

1.查询oracle数据库的字符集 SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER NLS_CHARACTERSET; 2.查询字段长度类型 SELECT * FROM user_tab_columns WHERE table_name user AND COLUMN_NAME SNAME 请确保将user替换为您想要查询的表名。sname为字段名 这里的字…

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

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

Ceph层次架构分析

Ceph的层次结构可以从逻辑上自下向上分为以下几个层次&#xff1a; 一、基础存储系统RADOS层 功能&#xff1a;RADOS&#xff08;Reliable Autonomic Distributed Object Store&#xff09;是Ceph的底层存储系统&#xff0c;提供了分布式存储的核心功能。它是一个完整的对象存…

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题&#xff0c;使用文档来指导故障排除工作&#xff0c;确定具体的网络问题&#xff0c;实施…

【前端】技术演进发展简史

一、前端 1、概述 1990 年&#xff0c;第一个web浏览器诞生&#xff0c;Tim 以超文本语言 HTML 为基础在 NeXT 电脑上发明了最原始的 Web 浏览器。 1991 年&#xff0c;WWW诞生&#xff0c;这标志着前端技术的开始。 前端&#xff08;Front-end&#xff09;和后端&#xff08;…

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址&#xff08;也就是换一个远程仓库提交&#xff09; 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作&#xff0c;仅供学习参考。 一、sqlite数据库操作类封装&#xff1a; sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

autoDL微调训练qwen2vl大模型

autodl是一家GPU服务厂商&#xff0c;提供专业的GPU租用服务&#xff0c;秒级计费、稳定好用 先去autodl把官方的帮助文档看懂先 AutoDL帮助文档 autodl注册并登陆&#xff0c;充钱&#xff0c;根据自己的情况租用新实例 创建新实例后马上关机&#xff0c;因为有个省钱的办法…

使用大语言模型创建 Graph 数据

Neo4j 是开源的 Graph 数据库&#xff0c;Graph 数据通过三元组进行表示&#xff0c;两个顶点一条边&#xff0c;从语意上可以理解为&#xff1a;主语、谓语和宾语。GraphDB 能够通过图来表达复杂的结构&#xff0c;非常适合存储知识型数据&#xff0c;本文将通过大语言实现图数…

RDIFramework.NET Web敏捷开发框架 V6.1发布(.NET6+、Framework双引擎)

RDIFramwork.NET Web敏捷开发框架V6.1版本发布&#xff0c;本次版本更新得非常多&#xff0c;主要有全面重新设计业务逻辑代码&#xff0c;代码量减少一半以上&#xff0c;开发更加高效。底层引入最易上手的ORM框架SqlSugar&#xff0c;让开发更加便利高效。同时保持与前期版本…

vscode-相关自用插件(倒计时,时间显示,编码对齐,css等编码颜色,简体中文,git提交相关,vue项目)

1.倒计时插件 2.时间显示插件 3.编码对齐格式颜色条 4.css等编码颜色 5.简体中文 6.git提交相关 7.vue项目

推荐一款优秀的Flash幻灯片制作软件:Flash Gallery Factory

iPixSoft Flash Gallery Factory是一款优秀的Flash幻灯片制作软件&#xff0c;可以把图片变换成绚丽多彩的Flash幻灯片和Flash相册&#xff0c;并带有动画模板、过渡效果、装饰及背景音乐等功能&#xff0c;是一款不容错过的软件。 iPixSoft Flash Gallery Factory是一款最佳的…

【Linux】man 手册的使用指南

man 手册的使用指南 man手册中文版上传至资源&#xff08;用心整理&#xff0c;感谢理解&#xff01;&#xff09; man手册官方下载链接&#xff1a;https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/ man 手册页&#xff1a;https://linux.die.net/man/ Linux man…

机器学习-35-提取时间序列信号的特征

文章目录 1 特征提取方法1.1 特征提取过程1.2 两类特征提取方法2 基于数据驱动的方法2.1 领域特定特征提取2.2 基于频率的特征提取2.2.1 模拟信号2.2.2 傅里叶变换2.2.3 抽取最大幅值对应特征2.2.4 抽取峰值幅值对应特征2.3 基于统计的特征提取2.4 基于时间的特征提取3 参考附录…

redis序列化数据查询

可以看到是HashMap&#xff0c;那么是序列化的数据 那么我们来获得反序列化数据 import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import redis.clients.jedis.Jedis;public class RedisDeserializeDemo {public static…

vue3 中直接使用 JSX ( lang=“tsx“ 的用法)

1. 安装依赖 npm i vitejs/plugin-vue-jsx2. 添加配置 vite.config.ts 中 import vueJsx from vitejs/plugin-vue-jsxplugins 中添加 vueJsx()3. 页面使用 <!-- 注意 lang 的值为 tsx --> <script setup lang"tsx"> const isDark ref(false)// 此处…

uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑

首先对 uniapp BLE蓝牙API进行封装 这里我封装了一个类&#xff1a;bluetoothService.js 代码&#xff1a; import { throttle } from lodash export default class Bluetooth {constructor() {this.device {};this.connected false;// 使用箭头函数绑定类实例的上下文&am…