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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值