11-16
2016
龙芯fedora21推出docker方案
-凯发k9国际首页登录
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启动镜像执行的命令。 |
图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 |
执行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 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.csdn.net/x931100537/article/details/49633107
[4]http://www.csdn.net/article/2014-10-28/2822323
[5]http://blog.csdn.net/cbl709/article/details/43955687
[6]http://blog.csdn.net/hazir/article/details/45111161
[7]https://my.oschina.net/2xixi/blog/516951
[8]https://my.oschina.net/feedao/blog/222699
[9]http://blog.csdn.net/s1070/article/details/52459963