手工构建基础镜像
前段时间,老大说要把目前正在开发的产品放在Docker容器中跑,而且容器的系统版本必须跟开发一致(CentOS6.5),然后我跑去Docker Hub上找一圈,发现Centos官方并没有提供这个版本!纳尼??开什么玩笑?好吧,然后又搜了一圈,找到了下面这个链接,解释了为什么没有CentOS6.5: https://github.com/CentOS/sig-cloud-instance-images/issues/13 ,大意是说,官方觉得没必要用CentOS6.5,因为有更高的版本能可以用,并且修复了低版本中的Bug,如果他们提供了6.5的版本,那可能还需要提供6.4,6.3等等,所以直接就不提供低版本了。
好吧,但最终要用哪个版本不是我说了算的,然后上Docker官网看看怎么手动构建自已的基础镜像,不幸的是,它虽提供了构建CentOS的基础镜像,但并不能构建出6.5版本的,于是乎又是一顿google,最终还是找到一个比较靠谱的文章,英文,且简略,地址我写在本文最后的部分,下面是我结合自已的需求构建镜像的全部过程。
需要的环境
- 一个正常运行的CentOS6.5系统,这里我用的是我们产品的开发环境系统
- 可以联外网,因为要下载东西3. 一个CentOS6.5的yum源,这里我用的是一个ISO文件直接mount到本地就可以用了
开始构建
安装febootstrap与xz
yum install -y febootstrap xz
挂载自己的repo镜像,以下是一个例子:
mount -t iso9660 -o loop /data/CentOS-6.5-x86_64-DVD.iso /data/iso
另注:如果你没有这样的iso文件,可以去CentOS官方下载一个,下载这个就行:CentOS-6.5-x86_64-minimal.iso
,然后按以上方式挂载。 当然,如果你有自已的yum源服务器也可以,那它应该长这个样子:http://your.host.com/repodir
,或者这样子:file:///var/www/html/repodir
。
开始生成镜像文件夹
febootstrap -i bash -i coreutils -i tar -ai bzip2 -i gzip \
-i vim-minimal -i wget -i patch -i diffutils -i iproute \
-i yum centos6.5 centos6.5-base-image file:///data/iso
说明:
file:///data/iso
:自己的repo源
centos6.5
:镜像版本
centos6.5-base-image
:文件夹名字
在文件夹内创建三个文件
touch centos6.5-base-ks/etc/resolv.conf touch centos6.5-base-ks/sbin/init echo -e 'NETWORKING=yes\nHOSTNAME=build' /etc/sysconfig/network
打包文件夹
tar --numeric-owner -Jcpf centos6.5-base.tar.xz -C centos6.5-base-image .
把打包好的文件发送到Docker环境下,并导入到Docker
scp centos6.5-base.tar.xz docker.host.com:/root
然后去对应的机器上(docker.host.com),把包导入到Docker,使之成为一个Docker镜像
cat centos6.5-base.tar.xz | sudo docker import - kxdmmr/centos6.5-base:v1
启动镜像
docker run -dti --name build -h build \ kxdmmr/centos6.5-base:v1 bash
验证版本
docker exec -ti build cat /etc/redhat-release
大功告成,现在可以往里面加自己需要的服务了!