K8S-Demo集群实践18:构建宇宙中第一个基础容器镜像,致敬Docker之父Solomon Hykes
- 这个题目可能吓到大家了,不好意思,我猜宇宙中第一个容器镜像是DotCloud公司的Solomon Hykes构建的,致敬!
- 由于有同事问,构建自己的容器镜像怎么操作?搜索了一下,大部分文章介绍构建第一个容器镜像的方法有两种,一种是编写Dockerfile,基于一个容器镜像构建,另一种是基于容器镜像,先运行一个容器,在容器中执行一些列操作,然后退出容器,基于该容器commit一个新的容器镜像
- 同事的好奇打动了我,那就写一篇构建第一个基础容器镜像的文章吧,本文介绍的方法,不属于上述两种方法,所以有了这个吓人的奇葩标题,那就开始构建自己小宇宙中的第一个基础容器镜像吧
一、定义基础容器镜像(目标)
- 可以运行一个shell:/bin/bash
- 可以执行 ls命名,看一下根目录下有哪些文件
- 实验环境是CentOS7.9
[root@master1 /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@master1 /]# uname -r
4.4.248-1.el7.elrepo.x86_64
二、创建rootfs
1、新建临时rootfs根目录 /tmp/myimage
[root@master1 /]# mkdir /tmp/myimage
[root@master1 /]# mkdir /tmp/myimage/bin
[root@master1 /]# mkdir /tmp/myimage/lib64
2、确定bash命令依赖的动态库
[root@master1 /]# ldd /bin/bash | egrep -o '/lib.*\.[0-9]'
/lib64/libtinfo.so.5
/lib64/libdl.so.2
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
3、确定ls命令依赖的动态库
[root@master1 /]# ldd /bin/ls | egrep -o '/lib.*\.[0-9]'
/lib64/libselinux.so.1
/lib64/libcap.so.2
/lib64/libacl.so.1
/lib64/libc.so.6
/lib64/libpcre.so.1
/lib64/libdl.so.2
/lib64/ld-linux-x86-64.so.2
/lib64/libattr.so.1
/lib64/libpthread.so.0
3、复制上述文件到 /tmp/myimage/lib64,并测试
[root@master1 /]# cp /bin/bash /tmp/myimage/bin/
[root@master1 /]# cp /bin/ls /tmp/myimage/bin/
[root@master1 /]# NEW_ROOT=/tmp/myimage
[root@master1 /]# NEW_LIBS="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
[root@master1 /]# for i in $NEW_LIBS; do cp -v "$i" "${NEW_ROOT}${i}"; done
[root@master1 /]# NEW_LIBS="$(ldd /bin/bash | egrep -o '/lib.*\.[0-9]')"
[root@master1 /]# for i in $NEW_LIBS; do cp -fv "$i" "${NEW_ROOT}${i}"; done
[root@master1 /]# chroot /tmp/myimage/ /bin/bash
bash-4.2# /bin/ls /
bin lib64
bash-4.2# /bin/ls -l /bin
total 1060
-rwxr-xr-x 1 0 0 964536 Jan 29 08:52 bash
-rwxr-xr-x 1 0 0 117608 Jan 29 08:55 ls
bash-4.2# exit
exit
[root@master1 /]#
三、打包容器镜像 centos7-bash
[root@master1 /]# tar -C /tmp/myimage/ -c . | docker import - centos7-bash
sha256:b3bb78b50d050bc047920b1745c4d47717786ded575e9d09b7cc37fd889c03fb
- 查看镜像大小:4.37MB
[root@master1 /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7-bash latest b3bb78b50d05 5 seconds ago 4.37MB
四、测试容器镜像
[root@master1 /]# docker run -it centos7-bash /bin/bash
bash-4.2# pwd
/
bash-4.2# /bin/ls /
bin dev etc lib64 proc sys
bash-4.2# exit
exit
[root@master1 /]#
参考
- https://www.cnblogs.com/jipinglong/p/11223239.html
- http://www.manongjc.com/article/148672.html
附专栏链接
K8S-Demo集群实践00:搭建镜像仓库Harbor+安全扫描
K8S-Demo集群实践01:准备VMware虚拟机模板
K8S-Demo集群实践02:准备VMware虚拟机3台Master+3台Node
K8S-Demo集群实践03:准备集群各组件间HTTPS通讯需要的x509证书
K8S-Demo集群实践04:部署etcd三节点高可用集群
K8S-Demo集群实践05:安装kubectl并配置集群管理员账户
K8S-Demo集群实践06:部署kube-apiserver到master节点(3个无状态实例)
K8S-Demo集群实践07:kube-apiserver高可用方案
K8S-Demo集群实践08:部署高可用kube-controller-manager集群
K8S-Demo集群实践09:部署高可用kube-scheduler集群
K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件
K8S-Demo集群实践11:部署ipvs模式的kube-kubelet组件
K8S-Demo集群实践12:部署Calico网络
K8S-Demo集群实践13:部署集群CoreDNS
K8S-Demo集群实践14:部署集群监控服务Metrics Server
K8S-Demo集群实践15:部署Kubernetes Dashboard
K8S-Demo集群实践16:部署Kube-Prometheus
K8S-Demo集群实践17:部署私有云盘owncloud(10.6版本)
K8S-Demo集群实践18:构建宇宙中第一个基础容器镜像
- 先用起来,通过操作实践认识k8s,积累多了自然就理解了
- 把理解的知识分享出来,自造福田,自得福缘
- 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
- 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
- Jason@vip.qq.com 2021-1-28