背景:
最近在建设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镜像自己动手做出来了!!