制作ubuntu16.04最小docker镜像

来源:互联网 发布:区域分割算法优缺点 编辑:程序博客网 时间:2024/05/21 13:55

背景:

最近在建设linux统一开发服务器,用的是ubuntu16.04系统.

由于开发人员需要使用docker,因此,需要做一个docker image给大家用.

由于国家的网络限制问题,很难从dockerhub中下载到docker镜像,因此,委托同事下载了一个ubuntu14.04的docker镜像

虽然,docker镜像是14.04,不是我们系统的16.04,但是,docker的原理是只加载kernel,因此,docker镜像14.04可以正常跑在16.04上的.


强迫症:

出了强迫症,决定自己做一个ubuntu16.04的docker镜像出来.

实践如下:

参考官网:https://docs.docker.com/engine/userguide/eng-image/baseimages/

从github:https://github.com/docker/docker/blob/master/contrib/mkimage-debootstrap.sh

中弄下这个自动生成docker最小镜像的脚本.

mkimage-debootstrap.sh -h 查看帮助

./mkimage-debootstrap.sh ubuntu xenial

脚本就开始运行了(环境需要可以上外网才行)


这时关键来了:

到apt-get update那步时,就走不动了,因为/etc/apt/sources.list里用的是国外的源,这里拿不到数据

ctrl+c中断脚本

cd /var/tmp/docker-rootfs-debootstrap-xenial-xxxxxx-xxxxxxx 

(上面的xxxx是随机数字,根据每个人的情况不一样)

这里就是新文件系统的根目录( 脚本是用debootstrap命令实现的).

将该路径下的 etc/apt/sources.list改成公司镜像里的sources.list地址.

然后,查看mkimage-debootstrap.sh里apt-get update那之后的实现, 其实就只剩几句有用的没有执行了.

sudo chroot . apt update

sudo chroot . apt dist-upgrade -y

这样,ubuntu16.04的根文件系统就补全了

然后,将根文件系统做成docker镜像

sudo tar --numeric-owner -c . | docker import - ubuntu:xenial

检查一下是否成功:

docker images 查看是否有ubuntu:xenial的镜像

运行:

docker run -i -t ubuntu:xenial echo success

看看是否正确输出success.

如果是,恭喜你! 

ubuntu16.04的docker镜像自己动手做出来了!!



原创粉丝点击