目前大部分的文章讨论的都是怎么从docker hub或者openvz上下载基础镜像,然后添加自己的功能制作镜像,包括涵盖了大部分docker内容的。但是如果实在找不到想要的基础镜像,比如我想制作Fedora Core 2的基础镜像,可是找了好久都没有找到,就需要自己从头制作基础镜像。
制作需要在linux下,我的操作系统是centos6.5。
1. 安装febootstrap
Febootstrap在EPEL库里,所以首先要把EPEL库增加到yum源里。
在/etc/yum.repo.d/下新建epel.repo,内容如下
[epel]
name=fedora-epel
baseurl=http://mirrors.aliyun.com/epel/6/i/i386/
enabled=1
gpgcheck=0
然后#yum install febootstrap
2. 系统版本的选择
目前实际机器上用的系统是Fedora Core release3(Heidelberg)Kernel 2.6.9-34.EL on i586,编译用的机器系统是Red Hat AS4 U3, gcc版本gcc version 3.4.520051201 (Red Hat 3.4.5-2)
现在我从网上找到了fedora core 3,但是发现内核版本是kernel2.6.9-1.667 gcc 版本是gcc version3.4.2 20041017 (Red Hat 3.4.2-6.fc3),而Red Hat AS4 U3没有找到更新源。这就陷入了困境,如果采用fc3,与之前的编译环境不符,可是又找不到Red Hat AS4 U3的源,最后找到了一篇文章(参考https://wenku.baidu.com/view/a97f9bb2fd0a79563c1e72c0.html)知道了CentOS4.3等同于RedHat AS4 U3,既然这样就直接用centos4.3来制作编译环境吧。
附上找了好久找到的更新源
Centos4.3 http://vault.centos.org/4.3/os/i386/
Centos6.5 http://vault.centos.org/6.5/os/i386/
Fedora core3 http://archives.fedoraproject.org/pub/archive/fedora/linux/core/3/i386/os/
3. 制作镜像文件
利用febootstrap制作镜像文件,首先要找到更新源的地址。找了好久终于找到
制作命令
$febootstrap -i bash -i gcc-c++ -i openssh -i yum -i make centos4.3 centos4.3 http://vault.centos.org/4.3/os/i386/
其中-i后是要安装的程序,centos4.3是镜像标签,后一个centos4.3是生成的目录,后面是源地址。
执行完毕后会在当前目录下生成centos4.3目录
中间碰到错误UnicodeDecodeError: 'ascii' codeccan't decode byte 0xe8 in position
是yumrepo.py中报出的。
只要修改这个文件,在import后增加
Import sys
reload(sys)
sys.setdefaultencoding('utf-8')
生成完centos4.3目录后用
$cd centos4.3
$tar -czvf centos4.3.tar.gz *
(注意,一定要进入centos4.3目录后用这个命令,不要把centos目录也压进压缩包了。否则运行容器的时候会出现used "exec:\"bash\": executable file not found in $PATH": unknown.的错误。)
(由于我的操作系统是centos6.5,而docker是在window上安装的dockertoolbox17,后来导入文件的时候出现了错误,发现是tar版本的问题,于是在centos6.5上只用tar -cvf打包,然后在docker虚拟机上压缩。)
生成镜像的压缩文件。
4. 在docker中导入
$docker imager import centos4.3.tar.gz centos:4.3
可以将镜像导入。