制作Docker基础镜像base image的恋爱三部曲

  • Post author:
  • Post category:其他


第一部曲:初选Docker

老的项目还需要开发维护,但新的硬件已经很难安装上旧的Linux OS。实际上,我们平时使用这个老系统,也仅是用来编译版本而已,是一个非常受限应用场合,不会很频繁地使用。那么可选的一个部署途径,就是安装虚拟机,使用上慢点就慢点吧。

但是,虚拟机是安装Docker类型的虚机mkimage-yum.sh,还是Virtualbox类型的虚机呢?

对于这个问题,我思考、犹豫了好几天,总觉得想不透彻。最后形成一个大致想法目标是想让镜像尽可能保持不变,以利于后期重复使用,而虚机又在使用中比较方便,符合平时使用习惯。

从镜像保持不变这个角度分析,docker的数据卷映射与Virtualbox的挂载共享目录都有自己的解决方案,但docker对于镜像不变的约束力,更是强大了很多!粗略验证了下virtualbox的共享目录的办法,操作上还是比较繁琐的和不自由,而docker的数据卷映射则自由的多。加上对比下,虚拟机的启动速度,docker又拥有无与伦比的优势,几乎是秒起,就像执行普通的shell命令一样;再加上docker+数据卷映射,几乎可以无缝地切换和编译。

那么,就选择Docker虚拟机这条道走到黑吧!!!

第二部曲:如何制作基础镜像base image

碰到的第二个拦路虎,就是如何制作一个docker的base image。虽然,docker hub提供了常见的CentOS、Ubuntu等基础镜像,但是,我用到的发行版是CentOS下游定制发行版,还是不能直接用docker hub上的CentOS基础镜像,特别是编译代码使用场合。某些一知半解的人,总想尽可能的环境一样,也懒得给他们多费口舌,那么,就剩下靠自己制作基础镜像了!

在网上研究了Docker制作基础镜像的方法,有不少误导,最后,发现只有一个是正途,其它可能都有点旁门左道了。。。,所以,觉得很有必要总结下,以利于扩大正能量。

+ 旁门左道A:对安装镜像ISO中的资料进行tar,然后导入docker。此种解决方法,误解了安装镜像ISO。就像在石钟山山上择石一二扣之,其声响亮,故曰石钟山一样。ISO安装镜像提供的是OS安装文件,而非可以运行的OS环境。而搜索引擎上搜索从安装ISO镜像如何制作docker镜像,经常遇到这些似是而非的网文。

+ 旁门左道B:利用同种OS环境的虚拟机或物理机,在环境里面进行打包镜像,而此种方法在docker官网中是禁止使用的。虽然,可能在实际中可以使用,但这种环境所带来的硬件依赖信息,还是会比较多地进入打包镜像中,污染较大。

在Docker官网中建议,对于CentOS体系的操作系统制作基础镜像,建议使用


febootstrap


方式或


yum


方式进行docker镜像打包。我所拥有的CentOS下游发行版,可能没有那么友好支持febootstrap,但是,考虑到此ISO镜像是能够支持作为yum安装包源的,那么,使用yum方式从iso镜像制作docker基础镜像base image将是可行的。

理论上推演很顺畅!

正途:

https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh

第三部曲:还有点小绕绕。




mkimage-yum.sh


脚本中的代码和默认值,可以看出脚本制作基础镜像所要求的操作系统环境,最好与打包镜像所对应的操作系统是一致的。

但是,很可惜,对于这点不能直接满足。

在mkimage-yum的脚本中依赖dockcer操作,而docker对于最低的Linux内核是有要求的,我们要打包镜像OS的Linux内核是不满足的。那么,还是有两种方法,一是将脚本操作步骤分开来做,产生tar包与docker导入和验证分开;二是可以选择支持docker的环境,进行交叉制作,就像


交叉编译


一样。mkimage-yum脚本也是支持此种使用方法,通过特殊配置yum的配置文件,以及二次修改脚本代码变更脚本中yum命令携带定制参数


–disableplugin=fastestmirror –disablerepo=\* –enablerepo=C6-base


,将yum安装所依赖的信息,按照打包的镜像OS环境进行配置。

最后,制作的Docker基础镜像base image,可以在ubuntu/centos两个系统上运行,如丝般顺滑:)

爱Docker,初来自不经意的选择;相识于懵懂;最后,爱她,源于她和你相知!



版权声明:本文为jkler_doyourself原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。