龙芯Fedora21推出docker方案

本文详细介绍了Docker在龙芯平台上的移植和运行过程,包括环境配置、镜像制作及定制应用镜像的方法,证明了Docker可作为大数据、云计算的原型平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.loongson.cn/news/company/495.html

IT界的技术发展更新速度不断加快,5年前的hadoop,3年前的openStack,现在的docker。龙芯平台以支持docker作为建设服务器软件生态的核心工作。
        龙芯在3A2000、Fedora21上完成了docker 1.6的移植和验证。可供云计算、大数据厂商推出相应龙芯解决方案产品时选用。

一、简介

        什么是docker?其实docker就是一种虚拟化技术,它是一个开源的应用容器引擎,开发者可以将某个应用以及应用运行时依赖库制作成镜像,分发到其他机器上执行。如图1,相比虚拟机(VM)技术而言,docker共享hostOS,少了guestOS对内存和CPU等资源的开销,因此docker效率更高,更加的轻量级化。

图1. VM与docker的架构比较

        docker形式为:build(制作镜像)、ship(仓库迁移)、run(运行应用)。而这三种形式由镜像、仓库、容器承载实现。
        IMAGES(镜像):docker镜像由多个只读层合并而成。除了最下层外,每个层都有一个指针指向相邻的下层。其中每一层由id、元数据、指向相邻下层的指针组成。
        CONTAINER(容器):容器是镜像运行的一个实例。一个容器包含code、runtime、system tools、system binaries等一切运行所需的依赖。相比镜像,它多了一层读写层。
        镜像和容器可描述为图2所示

图2.docker镜像和容器

        REPOSITORY(仓库):存放镜像的地方,分为公有仓库和私有仓库。公有仓库由git Hub提供。仓库服务器上存放多个仓库,每个仓库又包含多个镜像,由不同的镜像tag区分,每个tag下包含多个不同的容器。仓库描述见图3

图3.docker注册服务器上的仓库

二、移植环境

        docker1.6对平台软件的要求:
        系统必须是64位  (运行file /bin/ls命令查看系统位数)
        iptables>1.4    (运行iptables -v查看设置防火墙工具的版本)
        golang>=1.4.2(运行go version命令查看go语言版本)
        内核版本必须大于3.10       (运行uname -r查看内核版本)
        本次移植的环境为龙芯3A2000,操作系统为fedora21-1030版本,kernel 3.10.84,go 1.7,iptables1.4.21。

三、docker的安装、启动

        在fedora21-1030上安装、启动docker,只需执行下述命令:

# yum install docker        ;安装docker,需要机器连接网络
#docker version            ; 验证docker安装是否正常
# systemctl start docker    ;启动docker的服务
# docker -d                      ;启动docker的守护进程

四、基本镜像的制作

        安装docker后基本命令是可以执行的,但pull官方镜像是无法在mips64el上运行的,这是因为官方的镜像全部是x86-64架构。要想在龙芯平台上使用docker,需要我们自己创建mips64el版本的基础镜像。
        官方文档没有提供mips64el版本的基础镜像制作方法,笔者通过长时间摸索出下面的正确方法。创建基础镜像是执行下面的命令:

# tar --exclude=/usr/lib32  -cPvf fedora21-base.tar /home
 
将本机运行的操作系统打成一个fedora21-base.tar包,其中--exclude参数是将不需要的目录排除,可以使用--exclude多个参数排除多个目录。
 
# cat fedora21-base.tar | docker import - fedora21-base
 
将tar包使用docker import编译导入镜像
 
# docker run -i -t fedora21-base  /bin/bash
启动镜像。-i 代表打开标准输入 -t 虚拟一个窗口 /bin/bash启动镜像执行的命令。

        Docker正常启动容器的输出如下图:

图4.启动docker基本镜像

五、制作定制应用镜像

        实际应用中,往往将一个应用程序单独封装成一个镜像,以便于发布应用。官方提供了一个示范的hello-world镜像,通过剖析这个镜像可以掌握定制应用镜像的制作方法。
        官方的hello-world镜像总共910B,可谓麻雀虽小,五脏俱全。包含Dockerfile,Makefile,hello,hello.asm四个文件。

[Dockerfile]
FROM scratch   
#FROM指定build基于哪个镜像,scratch是一个空镜像,用于创       建极小镜像   
ADD hello /       #ADD是将指定的文件添加到指定目录            
       CMD ["/hello"]      #CMD是不带命令参数时启动镜像执行的命令

 

[Makefile]
hello: hello.asm   #Makefile 语法"target:dependcy1 dependcy2 
         nasm -o $@ $<   #$@--目标文件target$<--第一个依赖文件depency                 
         chmod +x hello                              
         .PHONY: clean  
#使用PHONY目标,避免同名文件相冲突,不会检查文件存在与否,都要执行清除操作   
         clean:                           
               -rm -vf hello       

        剩下的hello.asm是intel x86写的汇编源码,hello文件是最终make编译出来的可执行文件。
        执行docker run hello-world的流程见下图:

图5.启动hello-world镜像的流程

        注:
        1.向docker的守护进程发起一个启动hello-world镜像请求
        2.守护进程访问宿主操作系统,请求创建容器
        3.创建一个空的容器
        4.操作系统访问本地仓库服务器
        5.访问本地仓库服务器,若hello-world镜像已经在本地仓库服务器,则将镜像放入空容器里运行
                5.1. 若本地服务器上没有此镜像,访问远程官方服务器
                5.2 .若官方服务器有此镜像,下载到本地服务器,再将其放在空容器里执行。若无,则打印错误信息
        编写我们自己的hello-world,需修改的文件如下:

[hello.c]
#include<stdio.h>
int main()
{
        char * string="Hello from Loongson docker";
        printf("%s\n",string);
        return 0;
}

 

[Dockerfile]
FROM fedora21-base
ADD hello /
CMD ["/hello"]

 

[Makefile]
hello:hello.c
       gcc hello.c -o hello
 
 .PHONY : clean
clean:
        rm -f *.o

        执行如下命令,制作龙芯平台的镜像

# make                                    ;编译出可执行文件
# docker build -t fc21/hello-world .             ;编译生成fc21/hello-world的镜像
# docker images                         ;显示查看是否有fc21/hello-world镜像
# docker run fc21/hello-world                 ;启动hello-world镜像

        最后,在终端就会见到如下图的消息输出

图6.启动hello-world镜像的输出结果

六、总结

        本文验证了docker在龙芯平台上的移植和运行过程。证明docker能够做为大数据、云计算的原型平台。
        对于其它更深入的技术话题,包括registry镜像制作和搭建,有兴趣的朋友可以登录龙芯社区(http://www.loongnix.org)进行更深入的了、学习。
        参考资料:
        [1]http://www.docker.com/
        [2]https://github.com/docker/docker/
        [3]http://blog.youkuaiyun.com/x931100537/article/details/49633107
        [4]http://www.youkuaiyun.com/article/2014-10-28/2822323
        [5]http://blog.youkuaiyun.com/cbl709/article/details/43955687
        [6]http://blog.youkuaiyun.com/hazir/article/details/45111161
        [7]https://my.oschina.net/2xixi/blog/516951
        [8]https://my.oschina.net/feedao/blog/222699
        [9]http://blog.youkuaiyun.com/s1070/article/details/52459963
 

1.png  

 

### 龙芯 GCC 编译器使用指南及错误解决 龙芯 GCC 编译器是针对 MIPS 架构的交叉编译工具链,主要用于将源代码编译为适配龙芯处理器(MIPS64架构)的可执行文件。以下内容详细介绍了龙芯 GCC 的安装、配置和常见问题的解决方案。 #### 1. 安装龙芯 GCC 工具链 安装龙芯 GCC 工具链需要依赖于系统包管理器或手动编译安装。以下是基于 Debian/Ubuntu 系统的安装示例: ```bash sudo apt-get update sudo apt-get install gcc-mips64-linux-gnu binutils-mips64-linux-gnu ``` 如果需要更高版本的工具链,可以手动编译安装,具体步骤包括下载 GCC 源码、配置目标架构参数以及完成编译过程[^3]。 #### 2. 配置交叉编译环境变量 为了简化命令调用,可以通过设置环境变量 `CROSS_COMPILE` 来指定交叉编译器前缀: ```bash export CROSS_COMPILE=mips64el-linux-gnu- ``` 在编译时,确保所有工具链命令均带有此前缀,例如 `mips64el-linux-gnu-gcc`。 #### 3. 配置目标架构选项 龙芯 GCC 的目标架构选项通常包含以下内容: - `--target=mips64el-linux-gnu` - `-march=mips64r2`:指定指令集架构为 MIPS64 Release 2。 - `-mtune=3a5000`:优化目标为龙芯 3A5000 处理器。 完整配置命令示例: ```bash ./configure --host=mips64el-linux-gnu --prefix=/usr/local/mips64 \ --target=mips64el-linux-gnu -march=mips64r2 -mtune=3a5000 ``` #### 4. 常见错误及解决方法 ##### (1) 缺少目标架构支持库 错误信息可能类似于 `cannot find crt1.o: No such file or directory`,这通常是因为缺少目标架构的 C 运行时库(glibc)。解决方法是安装对应的目标库: ```bash sudo apt-get install libc6-dev-mips64-cross ``` ##### (2) 无法识别指令集扩展 如果出现类似 `Error: unrecognized instruction mnemonic` 的错误,可能是编译器未正确配置目标架构。请检查是否正确设置了 `-march` 和 `-mtune` 参数[^3]。 ##### (3) 链接阶段失败 链接阶段可能因缺少动态链接器或共享库而失败。解决方法是确保目标系统的根文件系统中包含完整的 glibc 和动态链接器。 ```bash sudo apt-get install libgcc1-mips64-cross ``` #### 5. 内核编译与配置 对于龙芯平台的 Linux 内核编译,通常需要结合交叉编译工具链和内核配置工具(如 `make menuconfig` 或 `make xconfig`)。以下是一个典型的编译流程: ```bash export ARCH=mips export CROSS_COMPILE=mips64el-linux-gnu- make defconfig make -j$(nproc) ``` 此外,如果涉及 Docker 的移植工作,需确保内核支持相关特性(如 UnionFS 或 Device Mapper),并使用脚本检测内核配置[^4]。 ```bash wget http://ftp.loongnix.org/os/fedora25/loongson/patches/docker-kernel.sh bash docker-kernel.sh <内核配置文件> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值